如何在Swift中检查NSTimer是否正在运行?

Cor*_*eDo 16 iphone ios swift

如何在Swift中检查NSTimer是否正在运行.在obj-c中代码应该像我猜的那样:

if (!myTimer) {
  //DO
}
Run Code Online (Sandbox Code Playgroud)

我试图像这样在Swift中设置它并显示错误.

if !myTimer {
 // DO
}
Run Code Online (Sandbox Code Playgroud)

Dun*_*n C 30

我所做的(两种语言)都是让我的计时器变弱.在swift中,它将是一个弱选项.

weak var myTimer: NSTimer?
Run Code Online (Sandbox Code Playgroud)

然后我创建一个计时器

myTimer = NSTimer.scheduledTimerWithTimeInterval(1,
          target: self,
          selector: "timerFired:",
          userInfo: nil,
          repeats: false)
Run Code Online (Sandbox Code Playgroud)

然后你可以使用

if timer == nil
Run Code Online (Sandbox Code Playgroud)

告诉它是否正在运行.

要停止计时器,只需拨打电话即可

myTimer?.invalidate()
Run Code Online (Sandbox Code Playgroud)

在Objective-C中它会是

[myTimer invalidate];
Run Code Online (Sandbox Code Playgroud)

这在Objective-C中有效,因为向nil指针发送消息是有效的,并且什么都不做.

如果您不想使用弱选项,您可以通过查看它的valid属性来查询计时器以查看它是否正在运行.

  • 仅仅因为`timer`不是nil不会告诉它是否正在运行. (6认同)
  • 如果你让它变弱就会这样.然后唯一拥有的引用是运行循环,在它触发/它失效后,它被释放并且没有被淘汰.它很方便. (3认同)

Sub*_*bbu 18

以下选项怎么样?你能看出这对你有用吗?

if myTimer.valid {
}
Run Code Online (Sandbox Code Playgroud)

  • @zaph,不.我使它变弱并检查无效的方法,或者你可以使它变强,然后检查是否timer.valid == true.使用`myTimer.valid`确实**不要求'myTimer`弱. (5认同)
  • Swift 4 - 如果myTimer.isValid {//某些代码} (2认同)