如何为循环的每次迭代设置延迟

Geo*_*old 2 ios swift

说我有这个循环:

count = 0

for i in 0...9 {

    count += 1

}
Run Code Online (Sandbox Code Playgroud)

我想推迟它。

延时功能:

// Delay function
func delay(_ delay:Double, closure:@escaping ()->()) {

DispatchQueue.main.asyncAfter( deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure)

}
Run Code Online (Sandbox Code Playgroud)

.

这意味着如果我想count每秒增加1,我会这样做:

count = 0

for i in 0...9 {

    delay(1) {

        count += 1

    }

}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为它只会延迟括号中的代码。如何延迟实际循环?我希望延迟停止迭代,直到时间过去,然后循环/代码可以再次重复。

Swe*_*per 12

您当前的代码不起作用,因为您正在异步进行增量。这意味着 for 循环仍将以其正常速度运行。

为了实现你想要的,你可以使用这样的计时器:

var count = 0
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true){ _ in
    count += 1
    print(count)
}
Run Code Online (Sandbox Code Playgroud)

如果您希望它在 5 次后停止,请执行以下操作:

var count = 0
var timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true){ t in
    count += 1
    print(count)
    if count >= 5 {
        t.invalidate()
    }
}
Run Code Online (Sandbox Code Playgroud)