所以基本上我试图打印“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
}
}
谁知道正确的方法呢?提前谢谢。
答案 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,而不是双倍。
请注意,上面的代码可能无法在游乐场中工作,因为只要主代码路径完成,它就会终止。