iOS基础 对AFNetworking工具进行封装

封装

封装的工具类是继承自: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)
    }
}

猜你喜欢

转载自blog.csdn.net/kkkenty/article/details/124982706