廢話不多說直接上代碼
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