专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构

封装AFN网络请求

  • 发现很多地方都直接 调用AFN GET方法 HMNetworkTool.shared.afnManager.GET ,这样有一个问题,如果有一天 afnManager.GET方法添加修改删除了参数.那么我们所有使用 AFN GET 方法都需要修改,所以需要将afnManager.GET进行封装

  • HMNetworkTool 添加 requestGET 方法,封装 afnManager.get 方法.

    /// 自己来封装GET请求,外面都直接调用requestGET,如果AFN以后不好用,想换其他的框架或者AFN升级请求参数更换了,我们只需要修改requestGET里面的内容,外面不同修改
    func requestGET(URLString: String, parameters: Any?, progress: ((Progress) -> Void)?, success: ((URLSessionDataTask, Any?) -> Void)?, failure: ((URLSessionDataTask?, Error) -> Void)?) {
    
      // 调用AFN的get
      afnManager.get(URLString, parameters: parameters, progress: progress, success: success, failure: failure)
    }
    
  • HMNetworkTool 添加 requestPOST 方法,封装 afnManager.post 方法.

    func requestPOST(URLString: String, parameters: Any?, progress: ((Progress) -> Void)?, success: ((URLSessionDataTask, Any?) -> Void)?, failure: ((URLSessionDataTask?, Error) -> Void)?) {
    
      // 调用AFN的post
      afnManager.post(URLString, parameters: parameters, progress: progress, success: success, failure: failure)
    }
    
  • 发现封装后的 requestGETrequestPOST 方法里面,除了调用 AFN方法名称不一样外,其他的一模一样,那么这个时候,我们可以将这2个方法合成一个方法,根据不同的请求方式调用不同的 AFN 方法

    • 定义 请求方法枚举
      // MARK: - 请求方法枚举
      enum HMNetworkMethod: String {
        case GET = "GET"
        case POST = "POST"
      }
      
    • 定义request方法

      /**
      网络请求封装
      parameter method:     请求方式
      parameter URLString:  请求URL地址
      parameter parameters: 请求参数
      parameter success:    请求成功回调
      parameter failure:    请求失败回调
      */
      func request(method: HMNetworkMethod, URLString: String, parameters: Any?, progress: ((Progress) -> Void)?, success: ((URLSessionDataTask, Any?) -> Void)?, failure: ((URLSessionDataTask?, Error) -> Void)?) -> Void {
        switch method {
        case .GET:
            // 调用AFN的get
            afnManager.get(URLString, parameters: parameters, progress: progress, success: success, failure: failure)
      
        case .POST:
            // 调用AFN的post
            afnManager.post(URLString, parameters: parameters, progress: progress, success: success, failure: failure)
        }
      }
      

results matching ""

    No results matching ""