Swift延迟循环

我有这个延迟function:

func delay(delay:Double, closure:()->()) { dispatch_after( dispatch_time( DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)) ), dispatch_get_main_queue(), closure) } 

从这里开始: dispatch_after – GCD在swift中?

此代码:

 func start(){ for index in 1...3 { delay(3.0){ println(index) } } } 

3秒后,它给:

3

3

3

我的目标:

3秒后:1

6秒后:2

9秒后:3

我该怎么做到这一点? 谢谢,

尝试乘以延迟索引

 func start(){ for index in 1...3 { delay(3.0 * index){ println(index) } } } 

如果你(看起来)把3看作循环的每一次迭代中打印出来的索引的值,你可以做下面的事情来确保迭代器variables的正确(当前)值被捕获到闭包:

 func start() { for index in 1...3 { let i = index delay(3.0 * i) { print(i) } } } 

虽然在Xcode 7.3和Swift 2.2中我看不到这种行为,但是使用延迟函数版本打印的值是1,2,3。 你可能使用了一个非常旧的版本的Swift? 这个博客文章实际上涵盖了Swift for循环行为和值捕获。

正如在另一个答案中指出的那样,将指数乘以3.0就可以实现3,6,9秒的延迟。