廢話不多說(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