网络请求封装基于Alamofire,数据解析使用SwiftyJSon,用法详见GitHub, 本文只做较简单的Get,Post封装和二次封装
// 网络请求一级封装
import UIKit
import Alamofire
import SwiftyJSON
enum MethodType {
case get
case post
}
class HttpTool: NSObject {
// 请求封装 请求类型由二次封装传过来
class func requestData(_ URLString: String!, _ type : MethodType ,params: [String: Any]? = nil,success:@escaping (SwiftyJSON.JSON) -> (), failure:((DataResponse<Any>) -> ())? = nil){
// 获取请求类型
let method = type == .get ? HTTPMethod.get : HTTPMethod.post
// 请求头
let headers: HTTPHeaders = [
"Accept" : "application/json"
]
Alamofire.request(URLString!, method: method, parameters: params, encoding: URLEncoding.default, headers: headers).responseJSON { (response) in
if response.result.isSuccess {
let json = JSON(response.data!)
success(json)
} else {
if let fail = failure {
// 可这里进行统一处理 400 404 等
fail(response)
}
}
}
}
}
这边进行二次封装ApiManager
// 网络请求管理 ---> 二次封装 统一在这个类写整个项目的网络请求
// 代码规范以request开头命名
import UIKit
import SwiftyJSON
class ApiManager: NSObject {
class func requestHomeTitleList(_ URLString: String!, params: [String: Any]? = nil,success:@escaping (SwiftyJSON.JSON) -> (), failure:((_ err : Any) -> ())? = nil){
HttpTool.requestData(URLString, .get, params: params, success: { (result) in
success(result)
}) { (err) in
failure!(err)
}
}
}
接下来只要外界调用就好了
let url = BASE_URL + "api/get_category/v1/?"
let params = ["id": 12,
"categoty": "home"]
ApiManager.requestHomeTitleList(url, params: params, success: { (result) in
print(result)
}) { (err) in
print(err)
}