iOS 项目中 网络请求Alamofire 的二次封装
1.先创建 网络请求的工具类 NetWorkTool 继承自NSObject
class NetWorkTool: NSObject {
}
2.导入头文件
import Alamofire
import SwiftyJSON
3.定义get和post 数据解析方式
static let getUrlEncoding = URLEncoding.queryString
static let postJSONEncoding = JSONEncoding.default
4.封装一个方法
static func exchangeData(url:String,method:HTTPMethod,params:Parameters?,encoding:ParameterEncoding,success:@escaping((_ json:JSON)->()),failure:@escaping((_ msg:String)->())) {
AF.request(newUrl, method: method, parameters: params, encoding: encoding, headers: httpHeaders, interceptor: nil, requestModifier: { urlRequest in
}).responseJSON { (dataResponse) in
}
}
5.处理url
var newUrl = url
if !newUrl.contains(BaseUrl) && !newUrl.contains("http") {
newUrl = BaseUrl+url
}
5.请求头
// 版本号
let currentVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
var httpHeaders:HTTPHeaders = [
.contentType("application/json"),
.accept("application/json"),
.userAgent("IOS"),
.init(name: "App-Version", value: currentVersion)
]
//自定义的类存储的 请求头的token
let tokenStr = PersonalInfo.sharedPersonal.token //本地保存的token
if tokenStr != "" {
httpHeaders.add(.authorization(tokenStr))
}
6.超时时长设置
urlRequest.timeoutInterval = 15
7.返回的数据处理
guard dataResponse.value != nil else {
failure("数据异常")
return
}
let dic = dataResponse.value! as! Dictionary<String, Any>
let code = dic["code"] as! Int
if code == 0 {
let data = dic["data"]
if data != nil {
let finalData = JSON(data!)
success(finalData)
}
else {
success([])
}
}
else if code == 406 {//登录过期
NotificationCenter.default.post(name:"跳转到登录界面", object: nil)
}
else {
failure(dic["msg"] as! String)
}
8.代码汇总
import UIKit
import Alamofire
import SwiftyJSON
class NetWorkTool: NSObject {
static let getUrlEncoding = URLEncoding.queryString
static let postJSONEncoding = JSONEncoding.default
//json:JSON 注释:项目中如果不用SwiftyJSON 参数格式也可以定义自己的json格式
static func exchangeData(url:String,method:HTTPMethod,params:Parameters?,encoding:ParameterEncoding,success:@escaping((_ json:JSON)->()),failure:@escaping((_ msg:String)->())) {
var newUrl = url
//BaseUrl:基础url
if !newUrl.contains(BaseUrl) && !newUrl.contains("http") {
newUrl = BaseUrl+url
}
newUrl = newUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! as String
let tokenStr = PersonalInfo.sharedPersonal.token
let currentVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
var httpHeaders:HTTPHeaders = [
.contentType("application/json"),
.accept("application/json"),
.userAgent("IOS"),
.init(name: "App-Version", value: currentVersion)
]
if tokenStr != "" {
httpHeaders.add(.authorization(tokenStr))
}
AF.request(newUrl, method: method, parameters: params, encoding: encoding, headers: httpHeaders, interceptor: nil, requestModifier: { urlRequest in
urlRequest.timeoutInterval = 15
}).responseJSON { (dataResponse) in
guard dataResponse.value != nil else {
failure("数据异常")
return
}
//print(dataResponse,url)
let dic = dataResponse.value! as! [String:Any]
let code = dic["code"] as! Int
if code == 0 {
let data = dic["data"]
if data != nil {
let finalData = JSON(data!)
success(finalData)
}
else {
success([])
}
}
else if code == 460 {//登录过期
NotificationCenter.default.post(name: "跳转到登录界面", object: nil)
else {
failure(dic["msg"] as! String)
}
}
}
版权声明:本文为weixin_43259805原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。