gpt4 book ai didi

ios - 在 Alamofire、Swift 中同时调用多个 API

转载 作者:搜寻专家 更新时间:2023-11-01 07:06:35 24 4
gpt4 key购买 nike

我的应用程序中有一个 TableView ,如图所示:

enter image description here

我需要的是当用户点击心形图像时,请求会发送到服务器以更改该 tableview 项目的状态,并且应该返回响应(成功或错误)。这是点击时调用的代码:

var manager = Alamofire.SessionManager.default
manager = Alamofire.SessionManager(configuration: configuration)
manager.request(######, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON(completionHandler: { response in

switch response.result {
case .success:
print(response)

let responseJson = JSON(response.result.value!)

// parsing JSON response using swiftyJSON
let code = (responseJson["code"]).int
let successStatus = responseJson["success"]
let message = (responseJson["message"]).rawString()

if ((code == 200) && (successStatus == true))
{
success()
}
else if (successStatus == false)
{
let errorObj = CError()
if ((code == 401) || (code == 404) || (code == 409))
{
errorObj.message = message!
errorObj.code = code!
error(errorObj)
}

else if ((code == 400) || (code == 500))
{
let object = response.result.value as? [String:Any]
let responseErrors = object!["errors"] as? [String:Any]
errorObj.responseErrors = responseErrors
errorObj.message = message!
errorObj.code = code!
error(errorObj)
}
else
{
errorObj.message = "Error processing request"
errorObj.code = 500
error(errorObj)
}
}

case .failure (let serverError):
let errorObj = CError()
if (serverError._code == NSURLErrorTimedOut)
{
errorObj.message = "Request timed out"
}
else
{
errorObj.message = "Error sending request to server"
}
errorObj.code = 500
error(errorObj)
}
}
)

如果我只点击一个项目,一切都会顺利。但是当我点击多个项目时,假设我点击了两个项目,代码的错误 block 被调用:

case .failure (let serverError):
let errorObj = CError()
if (serverError._code == NSURLErrorTimedOut)
{
errorObj.message = "Request timed out"
}
else
{
errorObj.message = "Error sending request to server" //this line gets called
}
errorObj.code = 500
error(errorObj)
}

然后返回一个项目的成功响应。

我从目前的情况了解到的是:

  • 调用服务器一次。
  • 它的响应没有返回,第二次调用。
  • 此调用会阻止第一个请求并调用其错误 block 。
  • 然后第二次调用需要时间来处理并且它的响应来了返回(调用成功 block )

根据 Alamofire 的文档,它的调用在后台处理。但是根据这个https://github.com/Alamofire/Alamofire/issues/1922默认情况下,响应在主线程上被调用。我认为这就是同时被阻止的问题。为了在后台处理,我尝试了这种方法:

let queue = DispatchQueue(label: "favAdv", qos: .background, attributes: .concurrent)
manager.request(urlAdventureFavouriteStatus, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON(queue: queue) { response in .....

但这对我不起作用。谁能建议我解决这个问题?如果我的理解有任何错误,请更正它,因为我是 iOS 新手。

我正在使用 Xcode 9.1、Swift 4、Alamofire 4。

最佳答案

我后来通过添加解决了这个问题:

let configuration = URLSessionConfiguration.default
configuration.httpMaximumConnectionsPerHost = 10 // change the number according to need

添加这个可以同时发送10个请求。

关于ios - 在 Alamofire、Swift 中同时调用多个 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47688206/

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