Alamofire:網(wǎng)絡(luò)封裝
代碼如下:?
//
//? NetRequestManager.swift
//? Alamoire
//
//? Created by Mac on 2023/5/18.
//
importFoundation
importAlamofire
class NetRequestManager : NSObject {
? ? ///成功回調(diào)
? ? typealiasSuccessHandlerType= (([String:Any],Int) ->Void)
? ? ///失敗回調(diào)
? ? typealias FailureHandlerType = ((MiruairNetError) -> Void)
? ? ///請求類型
? ? privatevarrequestType:HTTPMethod= .post
? ? ///? URL
? ? private var url: String?
? ? ///? 參數(shù)
? ? privatevarparams: [String:Any]?
? ? ///? 成功的回調(diào)
? ? private var success: SuccessHandlerType?
? ? ///? 失敗的回調(diào)
? ? private var failure: FailureHandlerType?
? ? ///? headers 設(shè)置
? ? private var headers: HTTPHeaders?
? ? ///? 數(shù)據(jù)請求
? ? private var httpRequest: DataRequest?
? ? ///? 鏈?zhǔn)秸Z法
? ? funcurl(_url:String?) ->Self{
? ? ? ? self.url= url ??""
? ? ? ? return self
? ? }
? ? ///? 請求類型
? ? funcrequestType(_type:HTTPMethod) ->Self{
? ? ? ? self.requestType= type
? ? ? ? return self
? ? }
? ? ///請求參數(shù)
? ? funcparams(_params: [String:Any]?) ->Self{
? ? ? ? self.params= params
? ? ? ? return self
? ? }
? ? ///成功
? ? funcsuccess(_handler:@escapingSuccessHandlerType) ->Self{
? ? ? ? self.success= handler
? ? ? ? return self
? ? }
? ? ///失敗
? ? funcfailed(_handler:@escapingFailureHandlerType) ->Self{
? ? ? ? self.failure= handler
? ? ? ? return self
? ? }
? ? ///獲取包頭
? ? funcgetHeader() ->HTTPHeaders{
? ? ? ? varrequestHeader =HTTPHeaders()
? ? ? ? ifletheader =headers{
? ? ? ? ? ? requestHeader = header
? ? ? ? }else{
? ? ? ? ? ? requestHeader.add(name:"Conatent-Type",value:"application/json")
? ? ? ? ? ? requestHeader.add(name:"Accept",value:"application/json")
? ? ? ? }
? ? ? ? returnrequestHeader
? ? }
? ? ///開始請求
? ? funcstartRequest() ->Request? {
? ? ? ? letrequestHeaders =getHeader()
? ? ? ? ///不使用緩存
? ? ? ? AF.sessionConfiguration.requestCachePolicy = .reloadIgnoringCacheData
? ? ? ? AF.sessionConfiguration.timeoutIntervalForRequest = 30
? ? ? ? ///? interceptor :? ? ? requestModifier:
? ? ? ? httpRequest = AF.request(self.url!,method: self.requestType,parameters: self.params,encoding: URLEncoding(destination: .queryString),headers: requestHeaders,interceptor: nil,requestModifier: nil)
? ? ? ? _ =httpRequest?.id
? ? ? ? httpRequest?.responseString(encoding:.utf8,completionHandler: { string in
? ? ? ? ? ? print("=======2")
? ? ? ? ? ? self.completeHandle(string: string)
? ? ? ? })
? ? ? ? return httpRequest
? ? }
? ? /// 請求response完成處理
? ? func completeHandle(string: AFDataResponse<String>) {
? ? ? ? letresponseResult = string.result
? ? ? ? varresultFlag =false
? ? ? ? varerrorCodeStr ="0"
? ? ? ? varstatusCode = string.response?.statusCode??0
? ? ? ? varerrorResponseMsg = string.error?.localizedDescription??""
? ? ? ? vartimeOut = string.error?._code
? ? ? ? letresultValue = string.value??""
? ? ? ? varserverDict =self.converStringToMap(fromStr: resultValue)
? ? ? ? switchresponseResult {
? ? ? ? case.success:
? ? ? ? ? ? resultFlag =true
? ? ? ? ? ? break
? ? ? ? case.failure:
? ? ? ? ? ? resultFlag =false
? ? ? ? ? ? ifletunderyingError = string.error?.asAFError?.underlyingError{
? ? ? ? ? ? ? ? ifleturlError = underyingErroras?URLError{
? ? ? ? ? ? ? ? ? ? switchurlError.code{
? ? ? ? ? ? ? ? ? ? case.timedOut:
? ? ? ? ? ? ? ? ? ? ? ? statusCode = urlError.code.rawValue
? ? ? ? ? ? ? ? ? ? case.cannotConnectToHost:
? ? ? ? ? ? ? ? ? ? ? ? statusCode = urlError.code.rawValue
? ? ? ? ? ? ? ? ? ? case.cannotFindHost:
? ? ? ? ? ? ? ? ? ? ? ? statusCode = urlError.code.rawValue
? ? ? ? ? ? ? ? ? ? case.unsupportedURL:
? ? ? ? ? ? ? ? ? ? ? ? statusCode = urlError.code.rawValue
? ? ? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? ? ? break
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? break
? ? ? ? default:
? ? ? ? ? ? break
? ? ? ? }
? ? ? ? ifstatusCode ==200{
? ? ? ? ? ? ifletsuclock =self.success{
? ? ? ? ? ? ? ? suclock(serverDict,statusCode)
? ? ? ? ? ? }
? ? ? ? }else{
? ? ? ? ? ? leterrorModel =MiruairNetError.init()
? ? ? ? ? ? errorModel.responseErrorType= .failType
? ? ? ? ? ? ifleterrorBlock =self.failure{
? ? ? ? ? ? ? ? errorModel.responseStatusCode= statusCode
? ? ? ? ? ? ? ? errorModel.errResponseMsg= errorResponseMsg
? ? ? ? ? ? ? ? errorModel.errReaponseCode= errorCodeStr
? ? ? ? ? ? ? ? errorBlock(errorModel)
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? func converStringToMap(fromStr: String = "") -> [String:Any] {
? ? ? ? letserverData = fromStr.data(using:String.Encoding.utf8)
? ? ? ? do{
? ? ? ? ? ? letserverDict =tryJSONSerialization.jsonObject(with: serverData!,options:JSONSerialization.ReadingOptions.mutableContainers)as? [String:Any]
? ? ? ? ? ? returnserverDict!
? ? ? ? }catch{
? ? ? ? ? ? return[String:Any]()
? ? ? ? }
? ? }
}
extension NetRequestManager {
? ? class func getRequest(url:String,params:[String:Any] = [:],successBlock:SuccessHandlerType!,failBlock: FailureHandlerType!) ->Request? {
? ? ? ? returnNetRequestManager().url(url).requestType(.get).success(successBlock).failed(failBlock).startRequest()
? ? }
}
class MiruairNetError: NSObject {
? ? var responseStatusCode: Int = 0
? ? var responseStatusCodeStr: String = ""
? ? var errResponseMsg: String = ""
? ? var errReaponseCode: String = ""
? ? var errReaponseTimeOutCode: Int = 0
? ? var responseErrorType: NetResponseErrorType?
}
enum NetResponseErrorType: Int {
? ? case successType,failType
}
使用:?
NetRequestManager.getRequest(url: "需要請求的url") { succeseResponse,responseCode in
?? ? ? ? ? print(succeseResponse,responseCode)?
? ? ? ? } failBlock: { MiruairNetError?in
? ? ?}