一尘不染

Swift闭包for循环

swift

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

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

有没有计数器的更好的方法。谢谢。


阅读 221

收藏
2020-07-07

共1个答案

一尘不染

您可以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")
})
2020-07-07