gpt4 book ai didi

ios - 如何在 swift 4 中执行两个并发 API 调用

转载 作者:可可西里 更新时间:2023-11-01 06:18:20 25 4
gpt4 key购买 nike

在此先感谢您的帮助,我有两个 API 调用,都是并发的,任何调用都可能先成功(我不想按顺序调用),在两个调用成功后,我必须停止我的事件指示器并重新加载我的 tableView,这是我的代码,但我不知道这是否正确以及如何重新加载我的 tableView 和停止我的事件指示器。

func downloadDetails(){
let operationQueue: OperationQueue = OperationQueue()
let operation1 = BlockOperation() {
WebServiceManager.getAData(format:A, withCompletion: {(data: Any? , error: Error?) -> Void in

if let success = data {
DispatchQueue.main.async {
(success code)
}
}
})

let operation2 = BlockOperation() {
webServiceManager.getBData(format: B, withCompletion: {(data: Any? , error: Error?) -> Void in

if let success = data {
DispatchQueue.main.async {
(success code)
}
}
})
}
operationQueue.addOperation(operation2)
}
operationQueue.addOperation(operation1)
}
downloadDetails() "calling function"

最佳答案

这正是 DispatchGroup 的用例。为每个调用输入组,在调用结束时离开组,并添加一个通知处理程序以在它们全部完成时触发。不需要单独的操作队列;这些已经是异步操作了。

func downloadDetails(){
let dispatchGroup = DispatchGroup()

dispatchGroup.enter() // <<---
WebServiceManager.getAData(format:A, withCompletion: {(data: Any? , error: Error?) -> Void in

if let success = data {

DispatchQueue.main.async {
(success code)
dispatchGroup.leave() // <<----
}
}
})

dispatchGroup.enter() // <<---
webServiceManager.getBData(format: B, withCompletion: {(data: Any? , error: Error?) -> Void in

if let success = data {

DispatchQueue.main.async {
(success code)
dispatchGroup.leave() // <<----
}
}
})

dispatchGroup.notify(queue: .main) {
// whatever you want to do when both are done
}
}

关于ios - 如何在 swift 4 中执行两个并发 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557431/

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