web-dev-qa-db-fra.com

Comment vérifier si un NSTimer est en cours d'exécution ou non dans Swift?

Comment vérifier si NSTimer est en cours d'exécution ou non dans Swift. Dans obj-c, le code devrait être comme ceci, je suppose:

if (!myTimer) {
  //DO
}

J'essaie de le définir dans Swift comme ceci et cela montre des erreurs.

if !myTimer {
 // DO
}
14
CoreDo

Ce que je fais (dans les deux langues) est de rendre ma minuterie faible. Dans Swift, ce serait une option faible. 

weak var myTimer: NSTimer?

Puis je crée une minuterie avec 

myTimer = NSTimer.scheduledTimerWithTimeInterval(1,
          target: self,
          selector: "timerFired:",
          userInfo: nil,
          repeats: false)

Et puis vous pouvez utiliser 

if timer == nil

pour dire si ça marche.

Pour arrêter le chronomètre, il suffit d'appeler

myTimer?.invalidate()

En Objective-C, ce serait 

[myTimer invalidate];

Cela fonctionne dans Objective-C car l'envoi de messages à des pointeurs nuls est valide et ne fait rien.

Si vous ne souhaitez pas utiliser un facultatif faible, vous pouvez interroger un minuteur pour savoir s'il est en cours d'exécution en consultant sa propriété valid.

30
Duncan C

Que diriez-vous de l'option ci-dessous? Pouvez-vous voir si cela fonctionne pour vous

if myTimer.valid {
}
15
Subbu
if !myTimer.valid {
    //DO
}
3
Race B
0
Leonard