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秒的延迟。