dispatch_after在swift中执行时不会运行代码

时间:2016-03-07 01:19:35

标签: ios swift grand-central-dispatch

当我使用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
}

1 个答案:

答案 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返回的任何内容都没有影响。