for循环中的Swift Closures

时间:2016-10-28 05:48:47

标签: swift

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

var count = 0
var noOfTimes = 10
for i in 0..<noOfTimes {
    someVariable.someClosure {
        result in
        count = count + 1
        if count == noOfTimes {
            //do something
        }
    }
}

如果没有计数器,是否有更好的方法可以做到这一点。 感谢。

1 个答案:

答案 0 :(得分:7)

您可以使用DispatchGroup。它就像一个计数的信号量。您可以致电enter来增加点数,并通过调用leave来减少点数。您可以使用notify计划在计数达到0时执行闭包:

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")
})