NSTimer语言 - 如何在 Swift 中延迟



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

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

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

我尝试将其与函数一起使用fire但也没有效果。

还有什么其他可能性?

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)

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

with swift 4.2

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

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

请记住,Timer是免费与CFRunLoopTimer桥接的,运行循环和 GCD 是两种完全不同的方法。 e

在 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

瓦尔弗向您展示了如何

最新更新