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("请求失败")
}
})
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。