问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

封装的sdk 中包含afn怎么办

发布网友 发布时间:2022-04-23 03:55

我来回答

3个回答

懂视网 时间:2022-04-23 08:16

这次给大家带来AFN封装网络请求详解,AFN封装网络请求的注意事项有哪些,下面就是实战案例,一起来看一下。

相信大家都知道,我们一般在一个项目中,网络请求都封装成一个单例,以确保整个项目的网络请求 Session 是同一个.

单例模式定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供,下面话不多说了,来一起看看详细的介绍吧。

通过cocoaPods 导入第三方框架

01-切换到项目目录

cd 项目名称

02-初始化Pods

pod init

03-打开 Pods 文件

open Podfile

04-编辑 Podfile

# 设置支持最低平台
platform :ios, '8.0'
target 'TestSwiftMixAFN' do
 # 如果是Swift项目,需添加"use_frameworks!"
 use_frameworks!
pod "AFNetworking"
end

05-安装 Pods

pod install

封装AFN网络请求工具

1 创建一个工具类, 继承自 AFHTTPSessionManager

import AFNetworking
class XMSessionManager: AFHTTPSessionManager {
 // ...
}

2 通过单例创建一个AFHTTPSessionManager 实例

/// 创建网络请求单例
static let shared: XMSessionManager = XMSessionManager()
----------------------------------------------------------------
/// 如果需要设置请求的属性,可在闭包中添加
/// 在第一次访问时,执行闭包,并且将结果保存在 shared 常量中
 static let shared1: XMSessionManager = {
 // 实例化对象
 let manager = XMSessionManager()
 // 设置响应反序列化支持的数据类型
 manager.responseSerializer.acceptableContentTypes?.insert("text/plain")
 // 返回对象
 return manager
 }()

3 通过枚举, 添加HTTP请求方法(GET/POST)

/// 枚举-请求方法
///
/// - GET: GET
/// - POST: POST
enum XMHTTPMethod {
 case GET
 case POST
}

4 自定义网络请求方法,通过闭包回调请求完成后的数据

/// 封装网络请求方法
 ///
 /// - Parameters:
 /// - Method: GET/POST, 默认是GET请求
 /// - URLString: 请求地址
 /// - parameters: 参数
 /// - completed: 结束回调
 func request(Method:XMHTTPMethod = .GET, URLString: String,parameters: [String: AnyObject]?, completed:@escaping ((_ json: AnyObject?, _ isSuccess: Bool)->())) {
 /// 定义成功回调闭包
 let success = { (task: URLSessionDataTask,json: Any?)->() in
 completed(json as AnyObject?,true)
 }
 /// 定义失败回调闭包
 let failure = {(task: URLSessionDataTask?, error: Error)->() in
 completed(nil,false)
 }
 /// 通过请求方法,执行不同的请求
 // 如果是 GET 请求
 if Method == .GET { // GET
 get(URLString, parameters: parameters, progress: nil, success: success, failure: failure)
 } else { // POST
 post(URLString, parameters: parameters, progress: nil, success: success, failure: failure)
 }
 }

5 网络请求工具的使用

///GET 请求
 XMSessionManager.shared.request(URLString: "http:xxx", parameters: nil, completed:{(json: AnyObject?,isSuccess: Bool)-> () in
 // 请求成功
 if isSuccess {
 print(json ?? "")
 } else {
 print("请求失败")
 }
 })
///POST 请求
 XMSessionManager.shared.request(URLString: "www.xxx.xxx", parameters: ["key":"value" as AnyObject], completed:{(json: AnyObject?,isSuccess: Bool)-> () in
 // 请求成功
 if isSuccess {
 print(json ?? "")
 } else {
 print("请求失败")
 }
 })

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:



热心网友 时间:2022-04-23 05:24

通常涉及到的网络请求在项目中为了方便管理,我们都会做成一个SDK 统一进行调用管理。一般的网络请求方面不会涉及到资源的管理和相关图标的展示之类的,所以封装成一个.a文件更加方便一下。封装的具体步骤可以参考这篇博文:http://www.cnblogs.com/linfenren/p/6003513.html。本篇博文主要阐述SDK 封装的时候的一些注意事项和相关的调试方法。

首先呢,设置相应的头文件包,文件名最好是和公司的项目名相对应比如说xxNetSDK.h之类的,再者就是设置相应的资源类,引入AFN、 MB、Reachability 等资源类。设置好相应的工程目录,就可以写代码了。

接着在直接使用AFN到工程的SDK中的时候会造成代码的大量冗余,此时应该进行的是先对AFN进行二次封装,做成一个工具类,之后再在自己的SDK中进行相应的调用。此时封装AFN工具类的时候,有几点需要注意的。比如说此时是设置相应的接口回调和传值,如果需求中有涉及到开发环境切换的问题,就需要在这个地方进行解决。思路如下: 在请求的方法中先设置BaseURL为请求的根路径,将此时的根路径定义成一个key-value的形式 key可以自己定义(随便写,比如:”NETALL_URL“),value 的值可以直接从本地去取,在工程中可以存储在沙盒里,在工程中切换环境的方法中进行更改相应的value值,此时就能根据切换的值设置相应的开发环境。以上是设置相应的环境的值,便与切换环境。

然后就是SDK中方法的命名和参数的传递-----1、命名原则:项目接口函数的命名一般是遵循和路由一致的命名,这样也方便查阅和搜索。2、项目中的api要根据项目的功能做相应的划分,比如说可以划分成:个人信息类、购买类、选课类、发布类等,还可以根据api的属性划分为相应的端:A端、B端等。3、关于设置api接口函数的回调问题:接口函数回调值的作用是用来标记本次请求,可以用来检测是否已经进行完了相关的网络请求,也可以用来取消相应的网络的请求。

最后导出相应的文件就可以了,真机编译一次,模拟器编译一次,最后合并 lipo-create/路径/xxxNetSDK.a。

热心网友 时间:2022-04-23 06:42

iOS 安卓的SDK是用eclipse工具封装的jar包,供开发者调用就行了, 简单说就是把功能封装,提供方法给别人调用,然后别人不知道内部实现。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我爱我校征文800字 建行聚财宝少一万时5小时内补上会怎样 咪哩乡文化教育 咪哩乡基础设施 咪哩村云南省玉溪市元江县咪哩乡咪哩村 咪哩乡历史文化 元江咪哩中心小学怎么样? 原神 原神胡桃进阶材料是什么? 原神 原神呢胡桃材料有哪些? 原神 原神胡桃的突破材料是什么? 大蒜一天吃多少为好 我的手机为什么一直是耳机模式 哪里有免费的网上直播赛事网址?? 战国四公子是谁! 春秋五公子是哪几位?有什么特别事例 冯爰是如何帮助孟尝君的 afnetworking是最常用的网络框架,谈谈这个框架内部是如何请求数据的 孟尝君一听心里是什么歇后语? 孟尝君生平故事介绍 战国孟尝君是怎么死的 冯缓为孟尝君营就的三窟指的是什么? 简明孟尝君生平 孟尝君与冯瑾的故事是什么? 冯为孟尝君做的第一件事是什么怎么做的,结果怎么样? 古代有个故事,说是有个有才能的人帮君王去收债,结果他却把借条烧了,是什么故事,求教!! 快捷键列表 电脑操作上的所有快捷键的列表 快捷键大全? 电脑上的所有快捷键大全 虎求百兽而食之,得狐。狐曰:“子无敢食我也。天帝使我长百兽。今子食我,是逆天帝命也”的意思。 是逆天帝命也,是的意思 每天都吃几粒大蒜对身体有没有好处? 那部小说有主角叫陈若雪 全国有多少人叫陈若雪 陈若雪的藏头诗 陈若雪这个名字怎么样 陈若雪 韩文怎样发音 陈若雪英文名怎么起 哎呦我的娘啊 破鞋漏脚尖 是什么歌 笔记本电脑散热器什么比较好?是侧吸式抽风机好还是散热板好? 手机上怎么订购或者预定火车票? 谁有好用的笔记本cpu降温器,电池节能软件,电池放电软件? 本本抽风式散热器真的降温10度以下么 男朋友送我礼物我该说什么 男朋友送的礼物,我不喜欢,我该告诉他吗? 安置房析产协议几个孩子都签字了,父母亲没签字,现在父母亲反悔有效吗? 百度有钱花满易贷优惠券使用规则? 经过律师签订的家庭财产分割协议,如果一方反悔,法院会强制执行吗? 可以解除析产协议吗 送什麼生日禮物給男朋友好? 一般16岁的女孩子喜欢什么东西?求大神帮助