iOS 项目中 网络请求Alamofire 的二次封装

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版权协议,转载请附上原文出处链接和本声明。