习惯了在oc中使用AFNetworking第三方网络框架,在swift中也想尝试封装一下。封装之前,先建一个类继承自AFHTTPSessionManager,需要在新建的类中导入AFNetworking框架,是一个动态的framework。
下面是封装的AFNetworking代码
import AFNetworking
// 定义枚举类型
enum HTTPRequestType : Int{
case GET = 0
case POST
}
class NetworkTools: AFHTTPSessionManager {
// 设计单例 let是线程安全的
static let shareInstance : NetworkTools = {
let tools = NetworkTools()
tools.responseSerializer.acceptableContentTypes?.insert("text/html")
return tools
}()
}
// 封装请求方法
extension NetworkTools {
func request(methodType : HTTPRequestType, urlString : String, parameters : [String : AnyObject], finished :@escaping (_ result : AnyObject?, _ error : Error?)-> ()) {
// 1 成功回调
let successCallBack = {(task :URLSessionDataTask, result : Any) in
finished(result as AnyObject?, nil)
}
// 2 失败回调
let failureCallBack = {(task : URLSessionDataTask?, error :Error) in
finished(nil, error)
}
if methodType == .GET {
// get请求
get(urlString, parameters: parameters, progress: nil, success: successCallBack, failure: failureCallBack)
}else {
// post请求
post(urlString, parameters: parameters, progress: nil, success: successCallBack, failure: failureCallBack)
}
}
}
/*
// get 请求
// get(urlString, parameters: parameters, progress: nil, success: { (task :URLSessionDataTask, result : Any) in
// finished(result as AnyObject?, nil)
// print("请求成功")
// }) { (task : URLSessionDataTask?, error :Error) in
// print("请求失败")
// finished(nil, error)
// }
// post请求
// post(urlString, parameters: parameters, progress: nil, success: { ( task : URLSessionDataTask, result : Any) in
// finished(result as AnyObject?, nil)
// }) { (task : URLSessionDataTask?,error : Error) in
// finished(nil, error)
// }
// }
*/
这里只封装的GET / POST 请求,没有封装上传下载功能。
下面是简单的调用
func getDetailChannel() {
let urlString = "http://www.douyutv.com/api/v1/channel?aid=ios&auth=6a4c6b01d851ceece76aee1980b9e5bb&client_sys=ios&limit=4&time="
// let str = "http://httpbin.org/get"
NetworkTools.shareInstance.request(methodType: .GET, urlString: urlString, parameters: ["name":"zhangsan" as AnyObject]) { (result : AnyObject?, error : Error?) in
if error != nil {
print(error!)
return
}
print(result!)
}
}
本文介绍了如何在Swift中封装AFNetworking网络库,通过创建继承自AFHTTPSessionManager的类实现GET/POST请求,并提供了简单示例。
1310

被折叠的 条评论
为什么被折叠?



