说我有这个循环:
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)
| 归档时间: |
|
| 查看次数: |
3659 次 |
| 最近记录: |