延迟 for 循环每个 运行
Delay for-loop each run
我想 运行 hs.robber.step() 6 次,每 2 秒一次。使用下面的代码,它会等待 2 秒,然后一次执行所有 6 次。
你能帮我找出错误吗?
我使用了这里的代码:How to add a time delay in swift
func delay(delay:Double, closure:()->()) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(delay * Double(NSEC_PER_SEC))),dispatch_get_main_queue(), closure)
}
func displayEscape() {
for _ in 1...6 {
let timeToDelay = Double(2)
delay(timeToDelay) {
self.hs.robber.step()
}
}
}
您为每次迭代设置了相同的延迟。您必须在每次迭代中增加延迟以使其看起来像您想要的那样(每 2 秒运行 6 次)。类似于:
func delay(delay:Double, closure:()->()) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(delay * Double(NSEC_PER_SEC))),dispatch_get_main_queue(), closure)
}
func displayEscape() {
let timeToDelay: Double = 2
var currentDelay: Double = 0
for _ in 1...6 {
currentDelay += timeToDelay
delay(currentDelay) {
self.hs.robber.step()
}
}
}
dispatch_time() 调用创建了未来的特定时间,而不是相对变化。将其计算放在如下循环中。
func displayEscape() {
let delay = Int64(2.0 * Double(NSEC_PER_SEC))
for step in 1...6 {
dispatch_after(
dispatch_time(DISPATCH_TIME_NOW, (Int64(step) * delay)),
dispatch_get_main_queue(),
{ self.hs.robber.step() })
}
}
我想 运行 hs.robber.step() 6 次,每 2 秒一次。使用下面的代码,它会等待 2 秒,然后一次执行所有 6 次。
你能帮我找出错误吗?
我使用了这里的代码:How to add a time delay in swift
func delay(delay:Double, closure:()->()) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(delay * Double(NSEC_PER_SEC))),dispatch_get_main_queue(), closure)
}
func displayEscape() {
for _ in 1...6 {
let timeToDelay = Double(2)
delay(timeToDelay) {
self.hs.robber.step()
}
}
}
您为每次迭代设置了相同的延迟。您必须在每次迭代中增加延迟以使其看起来像您想要的那样(每 2 秒运行 6 次)。类似于:
func delay(delay:Double, closure:()->()) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(delay * Double(NSEC_PER_SEC))),dispatch_get_main_queue(), closure)
}
func displayEscape() {
let timeToDelay: Double = 2
var currentDelay: Double = 0
for _ in 1...6 {
currentDelay += timeToDelay
delay(currentDelay) {
self.hs.robber.step()
}
}
}
dispatch_time() 调用创建了未来的特定时间,而不是相对变化。将其计算放在如下循环中。
func displayEscape() {
let delay = Int64(2.0 * Double(NSEC_PER_SEC))
for step in 1...6 {
dispatch_after(
dispatch_time(DISPATCH_TIME_NOW, (Int64(step) * delay)),
dispatch_get_main_queue(),
{ self.hs.robber.step() })
}
}