參數(shù)baby形式 swift-moya 網(wǎng)絡(luò)請(qǐng)求

?//baby請(qǐng)求

? ? casePostBabyParameters(pathStr:String,Babyparameters: [String:Any],URLparameters: [String:Any])

? ? //沒有參數(shù)

? ? caseGetNoParameters(pathStr:String)

? ? //有參數(shù)

? ? caseGetYesParameters(pathStr:String,parameters: [String:Any])

? ??casePostParameters(pathStr:String,parameters: [String:Any])

? ? //上傳頭像圖片

? ? caseuploadPortraitImage(pathStr:String,parameters: [String:Any],imageData:Data)

? ? //上傳文件

? ? caseuploadFileURL(pathStr:String,parameters: [String:Any],fileURL:URL)

JJNetWorkDemo github地址: ?Demo

//? JJNetWork.swift

//? JJNetWorkDemo

//? Created by IOS FOR Joe on 2022/4/22.


importUIKit

importFoundation

import Moya

//網(wǎng)絡(luò)請(qǐng)求

struct JJNetWork {

? ? // 請(qǐng)求成功的回調(diào)

? ? typealiassuccessCallback= (_ result:Any) -> Void

? ? //上傳進(jìn)度

? ? typealiasprogressCallback= (_ progress:Double) -> Void

? ? // 請(qǐng)求錯(cuò)誤的回調(diào)

? ? typealiaserrorCallback= (_ statusCode:Int) -> Void

? ? // 請(qǐng)求失敗的回調(diào)

? ? typealiasfailureCallback= (_ error: MoyaError) -> Void

? ? // 單例

? ? staticletprovider= MoyaProvider(plugins: [NetworkActivityPlugin{ (type,_)? in

? ? ? ? switchtype{

? ? ? ? case.began:

? ? ? ? ? ? print("顯示loading")

? ? ? ? case.ended:

? ? ? ? ? ? print("隱藏loading")

? ? ? ? }

? ? }])

? ? // 發(fā)送網(wǎng)絡(luò)請(qǐng)求

? ? static func request(

? ? ? ? target:JJService,

? ? ? ? success: @escaping successCallback,

? ? ? ? error1: @escaping errorCallback,

? ? ? ? failure: @escaping failureCallback

? ? ) {

? ? ? ? print("*****************************start ***********************")

? ? ? ? print("baseURL==\(target.baseURL)")

? ? ? ? print("path==\(target.path)")

? ? ? ? print("parameters==\(target.task)")

? ? ? ? provider.request(target) { resultin


? ? ? ? ? ? switchresult {

? ? ? ? ? ? caselet.success(moyaResponse):

? ? ? ? ? ? ? ? do{

? ? ? ? ? ? ? ? ? ? letdic =try! moyaResponse.mapJSON()as!NSDictionary


? ? ? ? ? ? ? ? ? ? let data = getJSONStringFromDictionary(dictionary:dic)

? ? ? ? ? ? ? ? ? ? print("======succeed data = \(dic)")

//? ? ? ? ? ? ? ? ? ? let model : APIModelJoe = APIModelJoe.deserialize(from: dic, designatedPath: "")!

//

//? ? ? ? ? ? ? ? ? ? let code : NSInteger = NSInteger(model.code )// dic["code"] as! NSInteger

//? ? ? ? ? ? ? ? ? ? if code == 200 {

//? ? ? ? ? ? ? ? ? ? ? ? //如果數(shù)據(jù)返回成功則直接將結(jié)果轉(zhuǎn)為JSON

//? ? ? ? ? ? ? ? ? ? ? ? try success(moyaResponse.mapJSON())

//? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? }catchleterror{

? ? ? ? ? ? ? ? ? ? //服務(wù)器報(bào)錯(cuò)等問(wèn)題 (常見問(wèn)題404 ,地址錯(cuò)誤)

? ? ? ? ? ? ? ? ? ? error1((erroras!MoyaError).response!.statusCode)

//? ? ? ? ? ? ? ? ? ? if ProgressHUD.hud != nil{

//? ? ? ? ? ? ? ? ? ? ? ? ProgressHUD.hideHud()

//? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? caselet.failure(error):

? ? ? ? ? ? ? ? //沒有網(wǎng)絡(luò)等問(wèn)題 (網(wǎng)絡(luò)超時(shí),沒有網(wǎng))(必要時(shí)還可以將嘗試重新發(fā)起請(qǐng)求)

? ? ? ? ? ? ? ? failure(error)

//? ? ? ? ? ? ? ? if ProgressHUD.hud != nil{

//? ? ? ? ? ? ? ? ? ? ProgressHUD.hideHud()

//? ? ? ? ? ? ? ? }


? ? ? ? ? ? }


? ? ? ? ? ? print("*****************************end ***********************")

? ? ? ? }

? ? }


? ? /**

?? ? 字典轉(zhuǎn)換為JSONString


?? ? - parameter dictionary: 字典參數(shù)


?? ? - returns: JSONString

?? ? */

? ? static? func getJSONStringFromDictionary(dictionary:NSDictionary) -> String {

? ? ? ? if(!JSONSerialization.isValidJSONObject(dictionary)) {

? ? ? ? ? ? print("無(wú)法解析出JSONString")

? ? ? ? ? ? return""

? ? ? ? }

? ? ? ? letdata : NSData! =try? JSONSerialization.data(withJSONObject: dictionary, options: [])asNSData?

? ? ? ? letJSONString = NSString(data:dataasData,encoding:String.Encoding.utf8.rawValue)

? ? ? ? returnJSONString!asString


? ? }

? ? //上傳文件

? ? static func upload(

? ? ? ? target:JJService,

? ? ? ? progress:@escaping? progressCallback,

? ? ? ? success: @escaping successCallback,

? ? ? ? error1: @escaping errorCallback,

? ? ? ? failure: @escaping failureCallback){

? ? ? ? ? ? provider.request(target,callbackQueue:nil,progress: { (ProgressResponse)in

? ? ? ? ? ? ? ? progress(ProgressResponse.progress)

? ? ? ? ? ? }) { (result)in

? ? ? ? ? ? ? ? switchresult {

? ? ? ? ? ? ? ? caselet.success(moyaResponse):

? ? ? ? ? ? ? ? ? ? do{

? ? ? ? ? ? ? ? ? ? ? ? //如果數(shù)據(jù)返回成功則直接將結(jié)果轉(zhuǎn)為JSON

? ? ? ? ? ? ? ? ? ? ? ? trysuccess(moyaResponse.mapJSON())

? ? ? ? ? ? ? ? ? ? }catchleterror{

? ? ? ? ? ? ? ? ? ? ? ? //服務(wù)器報(bào)錯(cuò)等問(wèn)題 (常見問(wèn)題404 ,地址錯(cuò)誤)

? ? ? ? ? ? ? ? ? ? ? ? error1((erroras!MoyaError).response!.statusCode)

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? caselet.failure(error):

? ? ? ? ? ? ? ? ? ? //沒有網(wǎng)絡(luò)等問(wèn)題 (網(wǎng)絡(luò)超時(shí),沒有網(wǎng))(必要時(shí)還可以將嘗試重新發(fā)起請(qǐng)求)

? ? ? ? ? ? ? ? ? ? failure(error)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

}

// 定義請(qǐng)求方法

enum JJService {

? ? //baby請(qǐng)求

? ? casePostBabyParameters(pathStr:String,Babyparameters: [String:Any])

? ? //沒有參數(shù)

? ? caseGetNoParameters(pathStr:String)

? ? //有參數(shù)

? ? caseGetYesParameters(pathStr:String,parameters: [String:Any])


? ? casePostParameters(pathStr:String,parameters: [String:Any])

? ? //上傳頭像圖片

? ? caseuploadPortraitImage(pathStr:String,parameters: [String:Any],imageData: Data)

? ? //上傳文件

? ? caseuploadFileURL(pathStr:String,parameters: [String:Any],fileURL: URL)



}

extension JJService: TargetType {

? ? // 請(qǐng)求服務(wù)器的根路徑

? ? varbaseURL: URL {returnURL.init(string:BASE_SERVER_URL)!}

? ? // 每個(gè)API對(duì)應(yīng)的具體路徑

? ? varpath:String{

? ? ? ? switchself{

? ? ? ? case.PostBabyParameters(letpathStr,_):

? ? ? ? ? ? returnpathStr

? ? ? ? case.GetNoParameters(letpathStr):

? ? ? ? ? ? returnpathStr

? ? ? ? case.GetYesParameters(letpathStr, _):

? ? ? ? ? ? returnpathStr

? ? ? ? case.PostParameters(letpathStr, _):

? ? ? ? ? ? returnpathStr

? ? ? ? case.uploadPortraitImage(letpathStr, _, _):

? ? ? ? ? ? returnpathStr

? ? ? ? case.uploadFileURL(letpathStr, _, _):

? ? ? ? ? ? returnpathStr

? ? ? ? }

? ? }


? ? // 各個(gè)接口的請(qǐng)求方式,get或post

? ? varmethod: Moya.Method{

? ? ? ? switchself{

? ? ? ? case .PostBabyParameters:

? ? ? ? ? ? return.post

? ? ? ? case .GetNoParameters:

? ? ? ? ? ? return.get

? ? ? ? case .GetYesParameters:

? ? ? ? ? ? return.get

? ? ? ? case .PostParameters:

? ? ? ? ? ? return.post

? ? ? ? case .uploadPortraitImage:

? ? ? ? ? ? return.post

? ? ? ? case .uploadFileURL:

? ? ? ? ? ? return.post

? ? ? ? }

? ? }

? ? // 請(qǐng)求是否攜帶參數(shù),

? ? vartask:Task{

? ? ? ? switchself{

? ? ? ? case .GetNoParameters:

? ? ? ? ? ? return.requestPlain// 無(wú)參數(shù)

? ? ? ? case.GetYesParameters(_,letparameters):

? ? ? ? ? ? return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)


? ? ? ? case.PostParameters(_,letparameters):// 帶有參數(shù),注意前面的let

? ? ? ? ? ? return .requestParameters(parameters: parameters, encoding: URLEncoding.default)


? ? ? ? case.PostBabyParameters(_,letBabyparameters)://

? ? ? ? ? ? return .requestCompositeParameters(bodyParameters: Babyparameters, bodyEncoding: JSONEncoding.default, urlParameters: [:])


? ? ? ? ? ? //上傳頭像

? ? ? ? case.uploadPortraitImage(_, _,letimageData):

? ? ? ? ? ? print(imageData)

? ? ? ? ? ? letformData =MultipartFormData.init(provider:MultipartFormData.FormDataProvider.data(imageData),name:"pic",fileName:"pic.png",mimeType:"image/png")

? ? ? ? ? ? print(formData)

? ? ? ? ? ? letmultipartData = [formData]

? ? ? ? ? ? return.uploadMultipart(multipartData)

? ? ? ? case.uploadFileURL(_, _,letfileURL):

? ? ? ? ? ? return.uploadFile(fileURL)


? ? ? ? }

? ? }

? ? //是否執(zhí)行Alamofire驗(yàn)證

? ? publicvarvalidate:Bool{

? ? ? ? return false

? ? }

? ? //這個(gè)就是做單元測(cè)試模擬的數(shù)據(jù),只會(huì)在單元測(cè)試文件中有作用

? ? varsampleData: Data {

? ? ? ? switchself{

? ? ? ? case.PostBabyParameters(_,letbabyparameters):

? ? ? ? ? ? return"{\"parameters\": \(babyparameters)\"}".utf8Encoded

? ? ? ? case .GetNoParameters:

? ? ? ? ? ? return "just for test".utf8Encoded

? ? ? ? case.GetYesParameters(_,letparameters):

? ? ? ? ? ? return"{\"parameters\": \(parameters)\"}".utf8Encoded

? ? ? ? case.PostParameters(_,letparameters):

? ? ? ? ? ? return"{\"parameters\": \(parameters)\"}".utf8Encoded

? ? ? ? case.uploadPortraitImage(_,letparameters, _):

? ? ? ? ? ? return"{\"parameters\": \(parameters)\"}".utf8Encoded

? ? ? ? case.uploadFileURL(_,letparameters, _):

? ? ? ? ? ? return"{\"parameters\": \(parameters)\"}".utf8Encoded

? ? ? ? }

? ? }

? ? // 請(qǐng)求頭

? ? varheaders: [String:String]? {



? ? ? ? letuserDefault = UserDefaults.standard


? ? ? ? switchself{

? ? ? ? case .PostBabyParameters:

? ? ? ? ? ? return["adminToken":"\(userDefault.value(forKey:"token") ??"")","adminViewId":"\(userDefault.value(forKey:"viewId") ??"")","tenantId":"\(userDefault.value(forKey:"tenantId") ??"")","platform":"ios","Accept":"application/json"]

? ? ? ? case .GetNoParameters:

? ? ? ? ? ? return["adminToken":"\(userDefault.value(forKey:"token") ??"")","adminViewId":"\(userDefault.value(forKey:"viewId") ??"")","tenantId":"\(userDefault.value(forKey:"tenantId") ??"")","platform":"ios","Accept":"application/json"]

? ? ? ? case.GetYesParameters(_,_):

? ? ? ? ? ? return["adminToken":"\(userDefault.value(forKey:"token") ??"")","adminViewId":"\(userDefault.value(forKey:"viewId") ??"")","tenantId":"\(userDefault.value(forKey:"tenantId") ??"")","platform":"ios","Accept":"application/json"]

? ? ? ? case.PostParameters(_,_):

? ? ? ? ? ? return ["adminToken": "\(userDefault.value(forKey: "token") ?? "")","adminViewId": "\(userDefault.value(forKey: "viewId") ?? "")","tenantId": "\(userDefault.value(forKey: "tenantId") ?? "")","platform": "ios","Content-type" :"application/x-www-form-urlencoded"]

? ? ? ? case.uploadPortraitImage(_,_ , _):

? ? ? ? ? ? return ["adminToken": "\(userDefault.value(forKey: "token") ?? "")","adminViewId": "\(userDefault.value(forKey: "viewId") ?? "")","tenantId": "\(userDefault.value(forKey: "tenantId") ?? "")","platform": "ios","Content-type" :"application/json; charset=utf-8"]

? ? ? ? case.uploadFileURL(_,_, _):

? ? ? ? ? ? return ["adminToken": "\(userDefault.value(forKey: "token") ?? "")","adminViewId": "\(userDefault.value(forKey: "viewId") ?? "")","tenantId": "\(userDefault.value(forKey: "tenantId") ?? "")","platform": "ios","Content-type" :"application/json; charset=utf-8"]


? ? ? ? }

? ? }

}

// 擴(kuò)展方法

private extension String {

? ? varutf8Encoded: Data {

? ? ? ? returndata(using:String.Encoding.utf8)!

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容