Swift Closures in for loop
swift
Solution
You can use a `DispatchGroup` for this. It works like a counted semaphore. You can increase the count by calling `enter` and decrease the count by calling `leave`. You can schedule a closure to be executed when the count reaches 0 using `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")
})
Problem
Currently I am having code which executes a closure inside a loop. I want to know when all the closures have finished executing. Currently I am using a counter and incrementing it when the closure is completed and then I compare it with the no of times to be executed. Code is below ``` var count = 0 var noOfTimes = 10 for i in 0..<noOfTimes { someVariable.someClosure { result in count = count + 1 if count == noOfTimes { //do something } } } ``` Is there a better way to do this without the counter. Thanks.