Kin*_*ing 3 nsoperation nsoperationqueue ios swift4 swift4.1
在此先感谢您的帮助,我有两个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"
Run Code Online (Sandbox Code Playgroud)
Rob*_*ier 19
这正是用例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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3824 次 |
| 最近记录: |