NSTimer - 如何在 Swift 中延迟

Posted

技术标签:

【中文标题】NSTimer - 如何在 Swift 中延迟【英文标题】:NSTimer - how to delay in Swift 【发布时间】:2015-03-15 10:04:01 【问题描述】:

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

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

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

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

还有哪些可能?

【问题讨论】:

你显然不明白 NSTimer 是做什么的。您需要有一个选择器,并且在计时器触发时要在该方法中运行一些代码。没有选择器的计时器不会做任何事情。 这个答案就是你要找的***.com/a/24318861/3810673 非常感谢!我不理解选择器,因为我不明白为什么它应该用撇号。我把我的功能放在那里,一切都很好。 【参考方案1】:

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

【讨论】:

这是一个很好的解决方案,无需任何额外的方法。没想到在我的main方法中使用参数,谢谢! 想投票,结果发现我过去已经这样做了:)【参考方案2】:

使用 Swift 4.2

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

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

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

【讨论】:

【参考方案3】:

在swift中我们可以使用Dispatch_after.延迟

斯威夫特 3.0:-

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

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

【讨论】:

【参考方案4】:

使用 Grand Central Dispatch 怎么样?

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

Valfer 向您展示了如何

【讨论】:

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

在 Swift Playground 中使用 NSTimer [重复]

如何在 Swift 中声明类级函数?

如何使用 NSTimer 进行倒计时?

在 Swift 中使用 NSTimer

如何用另一个 NSTimer 停止 NSTimer?

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