是否可以停止for循环并使用按钮继续它和停止的位置。
我的意思是这样的:
for x in 0..<5 {
if x == 3 {
// show a button
// this button have to be pressed
// which do some tasks
// when all tasks are finished >
// continue this loop at the stopped point
}
}
这可能吗?如果有,怎么样?
答案 0 :(得分:1)
简答:使用信号量
更长的答案:
您的情况是一个更一般情况的示例,如何暂停某些计算,保存其当前状态(局部变量,调用堆栈等),然后从同一点恢复它,并恢复所有状态。
某些语言/系统提供协同程序来支持此功能,其他语言/系统提供更深奥的调用当前延续,您(目前)Swift ......
你所拥有的是 Grand Central Dispatch (GCD),在Swift中通过Dispatch
提供,它为执行并发异步任务和它们之间的同步提供支持。其他并发机制如pthread
也可用,但建议使用GCD。
使用GCD解决方案的概要是:
这可能听起来很复杂,但使用Swift block 语法和Dispatch
非常简单。但是你需要先阅读GCD!
或者,您可以询问是否可以将解决方案重组为多个部分,因此不需要保存/恢复当前状态。您可能会发现延续传递样式这样的设计很有用,使用Swift的块也很容易。
HTH