封装
封装的工具类是继承自:AFHTTPSessionManager
创建单例
使用static关键字、用let声明一个本类型的常量。(let是线程安全的。如:
import UIKit
import AFNetworking
class GGNetworkTools: AFHTTPSessionManager {
static let share = GGNetworkTools()
}
如此单例就制作好了。
解除不安全的网络访问限制
添加返回的解析类型
class GGNetworkTools: AFHTTPSessionManager {
static let share : GGNetworkTools = {
let network = GGNetworkTools()
network.responseSerializer.acceptableContentTypes?.insert("content/text")
return network
}()
}
封装
import AFNetworking
enum RequestType{
case GET
case POST
}
class GGNetworkTools: AFHTTPSessionManager {
static let share : GGNetworkTools = {
let network = GGNetworkTools()
network.responseSerializer.acceptableContentTypes?.insert("content/text")
return network
}()
}
extension GGNetworkTools {
func request(type:RequestType,parameters:[String:Any],success:((URLSessionDataTask,Any?)->Void)?,failure:@escaping((URLSessionDataTask,Error)->Void)){
if type == .GET {
get("http://httpbin.org/get", parameters: parameters, headers: nil, progress: nil) {
task, result in
//
success!(task,result)
} failure: {
task, error in
//
failure(task!,error)
}
}else if type == .POST {
post("http://httpbin.org/post", parameters: parameters, headers: nil, progress: nil) {
task, result in
//
success!(task,result)
} failure: {
task, error in
//
failure(task!,error)
}
}
}
}
合并重复代码(闭包)
func request(type: RequestType, parameters: [String:Any], finish: @escaping ((_ result : Any?, _ error : Error?)->Void)){
let defaultSuccessCallBack = {
(task:URLSessionDataTask, result:Any?) in
finish(result,nil)
}
let defaultFailureCallBack = {
(task:URLSessionDataTask?, error:Error) in
finish(nil,error)
}
if type == .GET {
get("http://httpbin.org/get", parameters: parameters, headers: nil, progress: nil, success: defaultSuccessCallBack, failure: defaultFailureCallBack)
}else if type == .POST {
post("http://httpbin.org/post", parameters: parameters, headers: nil, progress: nil, success: defaultSuccessCallBack, failure: defaultFailureCallBack)
}
}