【发布时间】:2017-04-09 14:42:11
【问题描述】:
预期行为:
对于 i = 0,打印语句在 0 秒后调用。
对于 i = 1,打印语句在 1.1 秒后调用
对于 i = 2,打印语句在 2.2 秒后调用
实际行为:
分别在0、1、2、3秒后调用打印语句,即忽略内部延迟功能。
那么为什么会出现这种差异?
for i in 0...3 {
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(i), execute: {
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(i/10), execute: {
print("function was called")
})
})
}
【问题讨论】:
-
但是问题是什么?你希望做什么?
-
使其每隔1秒执行一次打印语句
-
好吧,你的代码不会那样做;
for in 0...5立即执行所有循环。 -
但这已经被回答了数百次了。就个人而言,我会使用
delay并使用递归而不是循环。但是此外,您要求做的完全是人为的;在现实生活中没有人会这样做。你最好问问你想要解决的真正的问题。
标签: loops swift3 xcode8 delay delayed-execution