for循环中的Swift闭包
目前我有一个在循环中执行闭包的代码。我想知道所有闭包何时完成执行。目前,我正在使用一个计数器,并在闭包完成时递增它,然后将其与要执行的次数进行比较。代码如下for循环中的Swift闭包,swift,Swift,目前我有一个在循环中执行闭包的代码。我想知道所有闭包何时完成执行。目前,我正在使用一个计数器,并在闭包完成时递增它,然后将其与要执行的次数进行比较。代码如下 var count = 0 var noOfTimes = 10 for i in 0..<noOfTimes { someVariable.someClosure { result in count = count + 1 if count == noOfTimes {
var count = 0
var noOfTimes = 10
for i in 0..<noOfTimes {
someVariable.someClosure {
result in
count = count + 1
if count == noOfTimes {
//do something
}
}
}
var计数=0
var noOfTimes=10
对于0..中的i,您可以为此使用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")
})
让dispatchGroup=dispatchGroup()
var noOfTimes=10
对于0中的i..闭包是同步执行的还是异步执行的?-请注意,如果count==noOfTimes
条件将永远不会为真,因为循环只执行noOfTimes-1
次。它是异步执行的。如果代码是错误的,只是想表达我的观点。我现在就改你为什么不用承诺?什么样的?这并没有解决最初的问题,但也许这就是你真正想要的。@eipipuz我确实看到了承诺。但是不想为一个简单的任务添加一个全新的框架。我想知道是否有一种简单的方法可以在swift语言中实现这一点?这对我帮助很大。