美文网首页IOS
Swift封装AFN网络请求

Swift封装AFN网络请求

作者: IOS开发攻城狮_Fyc | 来源:发表于2017-07-20 17:39 被阅读0次

    废话不多说直接上代码

      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
    

    相关文章

      网友评论

        本文标题:Swift封装AFN网络请求

        本文链接:https://www.haomeiwen.com/subject/whdjkxtx.html