目前,我正在执行在循环内执行闭包的代码。我想知道所有闭包何时完成执行。目前,我正在使用一个计数器,并在关闭完成时将其递增,然后将其与要执行的时间进行比较。代码如下
var count = 0 var noOfTimes = 10 for i in 0..<noOfTimes { someVariable.someClosure { result in count = count + 1 if count == noOfTimes { //do something } } }
有没有计数器的更好的方法。谢谢。
您可以DispatchGroup为此使用。它的工作就像计数信号灯一样。您可以通过调用来增加计数,enter并通过来减少计数leave。您可以使用以下命令安排闭包在计数达到0时执行notify:
DispatchGroup
enter
leave
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") })