如何在Swift中迭代具有时间延迟的循环

时间:2016-06-06 22:13:46

标签: ios swift delay

所以基本上我试图打印“yo”这个词20次,每次迭代之间有2秒的时间延迟。这是我提出的不起作用

    var j = 0
    while(j < 20){
        print("yo")

        let seconds = 2.0
        let delay = seconds * Double(NSEC_PER_SEC)//nanoseconds per seconds
        let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
        dispatch_after(time, dispatch_get_main_queue()) {
            j+=1
        }

    }

谁知道正确的方法呢?提前谢谢。

3 个答案:

答案 0 :(得分:0)

试试这个。它一次创建20个打印yo闭包,而不是在每个闭包之间连续延迟。

let delay = 2.0 * Double(NSEC_PER_SEC)
(1...20).map {
  iteration in
  let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(iteration)))
  dispatch_after(time, dispatch_get_main_queue()) {
    print("yo")
  }
}

答案 1 :(得分:0)

您可以尝试此功能

func repeatedPrint(count: Int, withDelay delay: Double)
{
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)))
    dispatch_after(time, dispatch_get_main_queue())
    {
        if count < 1 {return}
        print("yo")
        self.repeatedPrint(count - 1, delay: delay)
    }
}

repeatedPrint(20, delay: 2)

答案 2 :(得分:0)

你的代码很接近。您需要将print语句放在dispatch_after:

var j: UInt64 = 0
let seconds: UInt64 = 1
while(j < 10)
{
  let delay = seconds *  j * NSEC_PER_SEC //nanoseconds per seconds
  let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
  dispatch_after(time, dispatch_get_main_queue())
  {
    print("yo")
  }

  j += 1
}
print("Should start \"yo'ing\" soon")

你的数学也没了。 dispatch_time的延迟值是UInt64,而不是双倍。

请注意,上面的代码可能无法在游乐场中工作,因为只要主代码路径完成,它就会终止。