本文使用语言为 Swift4
import UIKit
import Alamofire
import MBProgressHUD
import SwiftyJSON
class HTTPRequestTool: NSObject {
//创建网络请求单例
static let defalut: HTTPRequestTool = {
return HTTPRequestTool()
}()
//设为私有, 只能通过单例方法创建
private override init() {}
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, SuccessHandler: @escaping (_ result: JSON) -> Void) , ErrorHanler: @escaping () -> 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"{//成功返回数据
SuccessHandler(dataDic["data"])
}else if code == "7"{//约定的退出登录 code 码
//to do log out
}else{//服务器内部其它错误
if let message = dataDic["message"].string{
print(message)
//ErrorHanlder默认值为空实现, 需要时调用
ErrorHandler()
}
}
}
}
//请求失败
case .failure(let error):
MBProgressHUD.hideHUD()
DEBUGLog(message: error)
}
}
}
}