Swift利用AFN实现封装网络请求详解
前言
相信大家都知道,我们一般在一个项目中,网络请求都封装成一个单例,以确保整个项目的网络请求Session是同一个.
单例模式定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供,下面话不多说了,来一起看看详细的介绍吧。
通过cocoaPods导入第三方框架
01-切换到项目目录
cd项目名称
02-初始化Pods
podinit
03-打开Pods文件
openPodfile
04-编辑Podfile
#设置支持最低平台 platform:ios,'8.0' target'TestSwiftMixAFN'do #如果是Swift项目,需添加"use_frameworks!" use_frameworks! pod"AFNetworking" end
05-安装Pods
podinstall
封装AFN网络请求工具
1创建一个工具类,继承自AFHTTPSessionManager
importAFNetworking classXMSessionManager:AFHTTPSessionManager{ //... }
2通过单例创建一个AFHTTPSessionManager实例
///创建网络请求单例 staticletshared:XMSessionManager=XMSessionManager() ---------------------------------------------------------------- ///如果需要设置请求的属性,可在闭包中添加 ///在第一次访问时,执行闭包,并且将结果保存在shared常量中 staticletshared1:XMSessionManager={ //实例化对象 letmanager=XMSessionManager() //设置响应反序列化支持的数据类型 manager.responseSerializer.acceptableContentTypes?.insert("text/plain") //返回对象 returnmanager }()
3通过枚举,添加HTTP请求方法(GET/POST)
///枚举-请求方法 /// ///-GET:GET ///-POST:POST enumXMHTTPMethod{ caseGET casePOST }
4自定义网络请求方法,通过闭包回调请求完成后的数据
///封装网络请求方法 /// ///-Parameters: ///-Method:GET/POST,默认是GET请求 ///-URLString:请求地址 ///-parameters:参数 ///-completed:结束回调 funcrequest(Method:XMHTTPMethod=.GET,URLString:String,parameters:[String:AnyObject]?,completed:@escaping((_json:AnyObject?,_isSuccess:Bool)->())){ ///定义成功回调闭包 letsuccess={(task:URLSessionDataTask,json:Any?)->()in completed(jsonasAnyObject?,true) } ///定义失败回调闭包 letfailure={(task:URLSessionDataTask?,error:Error)->()in completed(nil,false) } ///通过请求方法,执行不同的请求 //如果是GET请求 ifMethod==.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 //请求成功 ifisSuccess{ print(json??"") }else{ print("请求失败") } }) ///POST请求 XMSessionManager.shared.request(URLString:"www.xxx.xxx",parameters:["key":"value"asAnyObject],completed:{(json:AnyObject?,isSuccess:Bool)->()in //请求成功 ifisSuccess{ print(json??"") }else{ print("请求失败") } })
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。