当我使用dispatch_after方法产生延迟时,它永远不会在它之后执行代码。我需要返回一个数组,但它总是跳过它。
这是matt's延迟方法:
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
以下是发生错误的方法:
func rollDice() -> Array<Int> {
var diceArray = [Int]()
let timerTime:NSTimeInterval = 0.3
delay(timerTime) {
//my code
}
return diceArray //NEVER GETS HERE
}
答案 0 :(得分:5)
你似乎不明白延迟是什么。代码将按以下顺序运行:
func rollDice() -> Array<Int> {
var diceArray = [Int]() // ONE
let timerTime:NSTimeInterval = 0.3
delay(timerTime) {
// THREE
}
return diceArray // TWO
}
因此,在rollDice
内的代码运行之前,您的diceArray
将返回空的delay
。无论你在delay
内所做的是什么,从这个角度看都是无效的;它对rollDice
返回的任何内容都没有影响。