IOS

Swift封装AFN网络请求

2017-07-20  本文已影响0人  IOS开发攻城狮_Fyc

废话不多说直接上代码

  import UIKit
  import AFNetworking
  // swift 的枚举支持任意类型
  // swift / enum 在OC中只是支持整数
  enum WBHTTPMethod {
    case  GET
    case  POST
  }
  /**
  - 如果日常开发中,发现网络请求返回的状态码是 405,不支持的网络请求方法
  - 首先应该查找网路请求方法是否正确
  */
  class WBNetworkManager: AFHTTPSessionManager {
  //静态区 / 常量 /闭包
  static let shared = WBNetworkManager()

  func request(method: WBHTTPMethod = .GET, URLString: String, parameters: [String: AnyObject]?, completed: @escaping (_ json: AnyObject?, _ isSuccess: Bool)->()) {
    
    /// 定义成功回调闭包
    let success = { (task: URLSessionDataTask,json: Any?)->() in
        completed(json as AnyObject?,true)
    }
    
    /// 定义失败回调闭包
    let failure = {(task: URLSessionDataTask?, error: Error)->() in
        completed(nil,false)
    }
    
    /// 通过请求方法,执行不同的请求
    // 如果是 GET 请求
    if method == .GET { // GET
        get(URLString, parameters: parameters, progress: nil, success: success, failure: failure)
    } else { // POST
        post(URLString, parameters: parameters, progress: nil, success: success, failure: failure)
    }
}

}
遇到的问题

  let success = { (task: URLSessionDataTask,json: Any?)->() in
        completed(json as AnyObject?,true)
    }
   json 的类型必须是Any? 不能是AnyObject

Any 和 AnyObject的区别

 AnyObject 可以代表任何 class 类型的实例
 Any 可以表示任意类型,甚至包括方法 (func) 类型
 从以上可以看出Any和AnyObject都是协议而且,并且从Apple提供的注释中可以看出所有的类型都隱式实现了Any协议,所有的class都隱式实现了AnyObject协议
 AnyObject是Any的子集
 所有用class关键字定义的对象就是AnyObject
 所有不是用class关键字定义的对象就不是AnyObject,而是Any
上一篇下一篇

猜你喜欢

热点阅读