延迟 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() })
  }
}