目前我有代码在循环内执行闭包.我想知道所有闭包何时完成执行.目前我正在使用一个计数器并在闭包完成时递增它,然后我将它与要执行的次数进行比较.代码如下
var count = 0
var noOfTimes = 10
for i in 0..<noOfTimes {
someVariable.someClosure {
result in
count = count + 1
if count == noOfTimes {
//do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
没有柜台,有没有更好的方法来做到这一点.谢谢.
你可以使用一个DispatchGroup.它就像一个计数的信号量.您可以通过调用来enter减少计数,从而增加计数leave.您可以使用以下方法计划在计数达到0时执行的闭包notify:
let dispatchGroup = DispatchGroup()
var noOfTimes = 10
for i in 0..<noOfTimes {
dispatchGroup.enter() // Enter the dispatch group
someVariable.someClosure {
result in
// Process result
...
dispatchGroup.leave() // Exit dispatch group
}
}
dispatchGroup.notify(queue: DispatchQueue.main, execute: {
print("All Done")
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
965 次 |
| 最近记录: |