Swift封裝AFN網(wǎng)絡(luò)請(qǐng)求

廢話不多說(shuō)直接上代碼

  import UIKit
  import AFNetworking
  // swift 的枚舉支持任意類型
  // swift / enum 在OC中只是支持整數(shù)
  enum WBHTTPMethod {
    case  GET
    case  POST
  }
  /**
  - 如果日常開發(fā)中,發(fā)現(xiàn)網(wǎng)絡(luò)請(qǐng)求返回的狀態(tài)碼是 405,不支持的網(wǎng)絡(luò)請(qǐng)求方法
  - 首先應(yīng)該查找網(wǎng)路請(qǐng)求方法是否正確
  */
  class WBNetworkManager: AFHTTPSessionManager {
  //靜態(tài)區(qū) / 常量 /閉包
  static let shared = WBNetworkManager()

  func request(method: WBHTTPMethod = .GET, URLString: String, parameters: [String: AnyObject]?, completed: @escaping (_ json: AnyObject?, _ isSuccess: Bool)->()) {
    
    /// 定義成功回調(diào)閉包
    let success = { (task: URLSessionDataTask,json: Any?)->() in
        completed(json as AnyObject?,true)
    }
    
    /// 定義失敗回調(diào)閉包
    let failure = {(task: URLSessionDataTask?, error: Error)->() in
        completed(nil,false)
    }
    
    /// 通過(guò)請(qǐng)求方法,執(zhí)行不同的請(qǐng)求
    // 如果是 GET 請(qǐng)求
    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)
    }
}

}
遇到的問(wèn)題

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

Any 和 AnyObject的區(qū)別

 AnyObject 可以代表任何 class 類型的實(shí)例
 Any 可以表示任意類型,甚至包括方法 (func) 類型
 從以上可以看出Any和AnyObject都是協(xié)議而且,并且從Apple提供的注釋中可以看出所有的類型都隱式實(shí)現(xiàn)了Any協(xié)議,所有的class都隱式實(shí)現(xiàn)了AnyObject協(xié)議
 AnyObject是Any的子集
 所有用class關(guān)鍵字定義的對(duì)象就是AnyObject
 所有不是用class關(guān)鍵字定義的對(duì)象就不是AnyObject,而是Any
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容