for循环中的Swift Closures

Nav*_*han 0 swift

目前我有代码在循环内执行闭包.我想知道所有闭包何时完成执行.目前我正在使用一个计数器并在闭包完成时递增它,然后我将它与要执行的次数进行比较.代码如下

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)

没有柜台,有没有更好的方法来做到这一点.谢谢.

Pau*_*w11 7

你可以使用一个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)