【发布时间】:2021-06-02 04:39:10
【问题描述】:
我试图根据条件退出 for 循环,但我遇到了这个问题,因为它甚至没有退出循环。 这是我的代码循环。
var isFailure = true
let dispatchGroup = DispatchGroup()
var myFailureTask: Int?
for item in 1...5 {
dispatchGroup.enter()
test(item: item, completion: {
print("Success\(item)")
dispatchGroup.leave()
}, failureBlock: {
print("Failure\(item)")
myFailureTask = item
dispatchGroup.leave()
return
})
dispatchGroup.wait()
}
dispatchGroup.notify(queue: .main) {
if let myFailure = myFailureTask {
print("task failure \(myFailure)")
} else {
print("all task done")
}
}
func test(item: Int,completion: @escaping(() -> ()), failureBlock: @escaping(() -> ())) {
Thread.sleep(forTimeInterval: TimeInterval(item))
isFailure = !isFailure
if isFailure {
failureBlock()
} else {
completion()
}
}
【问题讨论】:
-
您需要在循环中的某处有一个
break才能退出它,但是break需要放在循环的同步部分。顺便说一句,你为什么需要打破循环,你要解决什么问题? -
当循环中的一项失败时,我需要退出循环,因为 API 调用取决于循环中前一项的成功。
-
那么这个 - stackoverflow.com/questions/51004245/… - 应该可以帮助你。
-
我只是做了一些改变,工作起来很有魅力。谢谢@Cristik
标签: ios swift for-loop dispatchgroup