本文使用语言为 Swift4
import UIKit import Alamofire import MBProgressHUD import SwiftyJSON //网络请求成功, 但是 code 码不为 0 时回调 protocol RequestSuccessProtocol: AnyObject { func todoSomething() } class HTTPRequestTool: NSObject { //创建网络请求单例 static let defalut: HTTPRequestTool = { return HTTPRequestTool() }() //设为私有, 只能通过单例方法创建 private override init() {} //代理 weak var delegate: RequestSuccessProtocol? private var headers: HTTPHeaders? //将不变的 header 写入 defaultHTTPHeaders, 不用每次写 func customHeaders(additionHeaders: HTTPHeaders) { var defalutHeader = SessionManager.defaultHTTPHeaders for (key, value) in additionHeaders { defalutHeader[key] = value } let configuration = URLSessionConfiguration.default configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders } func doRequest(url: String, method: HTTPMethod, params: [String: Any]?, encode: JSONEncoding, completionHandler: @escaping (_ result: JSON) -> Void) { MBProgressHUD.showWait() DEBUGLog(message: "\(method), 请求 URL: \(url), 参数 Param: \(String.init(describing: params))") let request: DataRequest = Alamofire.request(url, method: method, parameters: params, encoding: encode, headers: headers) request.responseJSON { (response) in switch response.result { //请求成功 case .success: MBProgressHUD.hideHUD() if let value = response.value { let dataDic = JSON(value) DEBUGLog(message: dataDic) if let code = dataDic["code"].string { if code == "0"{//成功返回数据 completionHandler(dataDic["data"]) }else if code == "7"{//约定的退出登录 code 码 //to do log out }else{//服务器内部其它错误 if let message = dataDic["message"].string{ print(message) //需要进行其它操作的 controller, 回调该方法 self.delegate?.todoSomething() } } } } //请求失败 case .failure(let error): MBProgressHUD.hideHUD() DEBUGLog(message: error) } } } }