swift - 每次运行延迟for循环

标签 swift for-loop delay

我想每 2 秒运行一次 hs.robber.step() 6 次。使用下面的代码,它会等待 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()
  }
 }
}

最佳答案

dispatch_time() 调用会创建一个 future 的特定时间,而不是相对变化。将其计算放在如下循环中。

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

关于swift - 每次运行延迟for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34107024/

相关文章:

ios - 将 tapGesture 添加到禁用了 userInteraction 的 imageView 上的标签

ios - 无法使用参数类型(productIdentifiers :Set<NSObject>))调用类型 SKproductsRequest 的初始值设定项

ios - 停止从 textView 中获取文本

使用 lodash forEach 的 Javascript 函数返回未定义

excel - 有没有比 vba 宏中的 foreach 循环更快的选项?

c# - Task.Delay 永远不会完成

ios - 在 Swift (iOS) 中获取设备的蓝牙名称和连接的蓝牙

python - 根据另一个 Dataframe for 循环的条件创建一个新的 Dataframe

jquery - 动画延迟,但在页面加载/函数触发时立即启动

java - 如何在android中的java代码中添加时间延迟