NSTimer - 如何在Swift中延迟

时间:2015-01-16 18:04:57

标签: ios swift nstimer

我在推迟计算机在游戏中的移动时遇到了问题。

我找到了一些解决方案,但他们在我的案例中不起作用,例如

var delay = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: nil, userInfo: nil, repeats: false)

我尝试将此功能用于fire功能,但也没有效果。

还有哪些其他可能性?

4 个答案:

答案 0 :(得分:99)

Swift 3

使用GCD:

let delayInSeconds = 4.0
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {

    // here code perfomed with delay

}

或使用计时器:

func myPerformeCode() {

   // here code to perform
}
let myTimer : Timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(self.myPerformeCode), userInfo: nil, repeats: false)

Swift 2

使用GCD:

let seconds = 4.0
let delay = seconds * Double(NSEC_PER_SEC)  // nanoseconds per seconds
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))

dispatch_after(dispatchTime, dispatch_get_main_queue(), {

   // here code perfomed with delay

})

或使用计时器:

func myPerformeCode(timer : NSTimer) {

   // here code to perform
}
let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("myPerformeCode:"), userInfo: nil, repeats: false)

答案 1 :(得分:4)

使用Swift 4.2

使用Timer可以避免使用选择器,而应使用闭包:

    Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in
        // Your code here
    }

请记住,TimerCFRunLoopTimer是免费的桥梁,并且运行循环和GCD是两种完全不同的方法。...e

答案 2 :(得分:2)

在swift中,我们可以使用Dispatch_after.

延迟

SWift 3.0: -

DispatchQueue.main.asyncAfter(deadline: .now()+4.0) {

        alert.dismiss(animated: true, completion: nil)
    }

答案 3 :(得分:0)