NSTimer - 如何在Swift中延迟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSTimer - 如何在Swift中延迟相关的知识,希望对你有一定的参考价值。

我在延迟计算机在游戏中的移动方面遇到了问题。

我找到了一些解决方案,但它们在我的情况下不起作用,例如:

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

我试图用功能fire但也没有效果。

还有哪些其他可能性?

答案

斯威夫特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)

斯威夫特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)
另一答案

使用Swift 4.2

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

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

请记住,Timer是使用CFRunLoopTimer免费桥接的,并且运行循环和GCD是两种完全不同的方法....

另一答案

在swift中,我们可以通过使用Dispatch_after.来延迟

SWIFT 3.0: -

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

        alert.dismiss(animated: true, completion: nil)
    }
另一答案

使用Grand Central Dispatch怎么样?

https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/index.html

Valfer告诉你如何

以上是关于NSTimer - 如何在Swift中延迟的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift Playground 中使用 NSTimer [重复]

将参数传递给 NSTimer 在 Swift 中调用的方法

为啥 NSTimer 在 swift 中只工作一次

在 Swift 中使用 NSTimer

如何用另一个 NSTimer 停止 NSTimer?

NSTimer 中的 UserInfo 没有传递正确的信息 - Swift