import UIKit
// Swift中的枚举支持任意类型
enum WBHTTPMethod {
case GET
case POST
}
// 网络管理工具
class WBNetworkManager: AFHTTPSessionManager {
// 静态区 、 常量、闭包/ 在第一次访问时,执行闭包,并且将结果保存在shared常量中
static let shared = WBNetworkManager()
// 封装AFN的 get和post请求
func request(method: WBHTTPMethod = .GET,URLString: String, parameters: [String: AnyObject]?, completon:(json: AnyObject?, isSuccess: Bool)->()) {
// 成功回调
let success = { (task:URLSessionDataTask, json:AnyObject?)->() in
completon(json: json, isSuccess: true)
}
// 失败回调
let failure = { (task:URLSessionDataTask?, error:NSError)->() in
print("网络请求错误\(error)")
// 针对 403 处理用户 token过期
if (task?.response as? HTTPURLResponse)?.statusCode == 403 {
print("token过期了")
// FIXME:发送通知(本方法不知道被谁调用,谁接收到通知,谁处理)
}
completon(json: nil, isSuccess: false)
}
if method == .GET {
get(URLString, parameters: parameters, progress: nil, success: success, failure: failure)
}else{
post(URLString, parameters: parameters, progress: nil, success: success, failure: failure)
}
}
}
调用:
WBNetworkManager.shared.tokenRequest(URLString: urlString, parameters: nil) { (json, isSuccess) in
print(json)
// 从json中获取 statuses 字典数组,如果as?失败 result = nil
let result = json?["statuses"] as? [[String:AnyObject]]
completion(list: result, issuccess: isSuccess)
}