gpt4 book ai didi

ios - Alamofire 概括请求

转载 作者:行者123 更新时间:2023-11-28 14:09:53 25 4
gpt4 key购买 nike

我正在使用 Almofire 来处理我的所有请求并且工作正常。我需要知道如何概括所有请求以在一个地方处理所有错误。

func updateSettingValue(group : String , value: String , callback: @escaping (SettingsResponseModel) -> Void, errorCallback: @escaping (Error) ->Void)
{
let url = BASE_URL_PROD + API_SETTINGS
let settingsParams : Parameters = ["Setting" : group , "Tag" : value]

Alamofire.request(url, method: .put, parameters: settingsParams, headers: getHeader()).responseObject {
(response: DataResponse< SettingsResponseModel>) in
switch response.result {
case .success:
print("response \(response)")
DispatchQueue.main.async {
callback(response.result.value!)
}
break
case .failure(let error):
print(error)
errorCallback(error)
}
}
}



func releaseKeys(mKey: String ,callback: @escaping (ReleaseKeyModel) -> Void
, errorCallback: @escaping (Error) -> Void){

let url = BASE_URL_PROD + API_RELEASE_KEY

let params: Parameters = ["mKey" : mKey]
Alamofire.request(url, method: .delete, parameters: params, encoding: URLEncoding.default, headers: getHeader()).responseObject{
(response : DataResponse< ReleaseKeyModel >) in
print("releaseKey: \(response) ")

switch response.result {
case .success:
DispatchQueue.main.async {
callback(response.result.value!)
}
break
case .failure(let error):
print(error)
errorCallback(error)
}
}
}

我如何将其概括为在 DataResponse 中为映射模型类获取参数,这样我就不必为所有方法单独处理成功和失败的情况。

最佳答案

您可以将与服务器的工作分为两类:

1) 类 RestClient

import Foundation

typealias responseBlock = (_ swiftObj: Any?, _ error: Error?) -> Void

class RestClient: NSObject {

static let shared = RestClient()
private var http = HttpService()

func updateSettingValue(group: String, value: String, resp: @escaping responseBlock) {

let url = BASE_URL_PROD + API_SETTINGS

let params = ["Setting": group, "Tag": value]

http.reque(url, method: .put, parameters: params, headers: getHeader(), resp: { (value, error) in

if let err = error {
return resp(nil, err)
}

guard let data = value else {
return resp(nil, error)
}

//your method for parse data
self.parseData(respData: data,
modelCls: SettingsResponseModel.self,
response: resp)
})
}

func releaseKeys(mKey: String, resp: @escaping responseBlock) {

let url = BASE_URL_PROD + API_RELEASE_KEY

let params = ["mKey": mKey]

http.reque(url, method: .delete, parameters: params, encoding: URLEncoding.default, headers: getHeader(), resp: { (value, error) in

if let err = error {
return resp(nil, err)
}

guard let data = value else {
return resp(nil, error)
}

//your method for parse data
self.parseData(respData: data,
modelCls: ReleaseKeyModel.self,
response: resp)
})
}

}

2) HttpService 类

class HttpService {

func reque(_ url: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil,
queue: QueueQos = .defaultQos,
resp: @escaping responseBlock) {

Alamofire.request(url,
method: method,
parameters: parameters,
encoding: encoding,
headers: headers
).responseObject (queue: queue) { (response) in

switch response.result {
case .success:

if let jsonResp = response.result.value {

//You can also check out some error messages at this place.

resp(jsonResp, nil)
}

case .failure(let error):
resp(nil, error)
}
}
}

}

关于ios - Alamofire 概括请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52673526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com