Swift中的循环延迟问题,what';有什么区别?

Swift中的循环延迟问题,what';有什么区别?,swift,Swift,所以基本上,我一直在试图搞乱Swift中的循环和延迟。我找到了关于如何正确实现它的多个答案,也找到了如何实现它的答案。但是我有一个没有回答的问题 为什么这个延迟循环工作: for a in 1..<61 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(a)) { print(a) } } 对于in 1..循环不等待调度队列。使用DispatchQueue类似于说: “我希望这项工作在某个截止日期(工作完

所以基本上,我一直在试图搞乱Swift中的循环和延迟。我找到了关于如何正确实现它的多个答案,也找到了如何实现它的答案。但是我有一个没有回答的问题

为什么这个延迟循环工作:

for a in 1..<61 { 
  DispatchQueue.main.asyncAfter(deadline: .now() + Double(a)) {
    print(a)
  }
}

对于in 1..循环不等待
调度队列
。使用
DispatchQueue
类似于说:

“我希望这项工作在某个截止日期(工作完成的时间)之前转移到另一个线程(在本例中是主线程,所以不会更改)。”

由于循环不等待,在第二个示例中,一切都在1秒后执行

然而,在第一种情况下,延迟被不同的金额抵消。第一次迭代需要2秒,然后是3秒,然后是4秒,以此类推


注意:不建议在环路内延迟。通常还有其他解决方案,例如使用计时器。

因此,如果我理解正确,在延迟结束时,它会延迟60秒,但由于59秒过去了,它实际上会延迟一秒吗?因为事情就是这样now@morwi循环来自
1..@morwi我看到了一个小错误,我纠正了它。完全正确地忘记了@morwi的
+1
。循环基本上一次触发所有
调度队列
s(因为循环不等待)。因此,第一条打印消息需要2秒钟,然后是3秒钟,然后是4秒钟。每个循环之间的差异为1秒。@morwi我建议使用不带for循环的循环,这可能会更好
DispatchQueue
不是100%可靠的,运行某些代码的大致时间。
for a in 1..<61 { 
  DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
    print(a)
  }
}