2017-06-07 2 views
0

J'ai essayé de recharger dans des vies de jeu avec une minuterie, mais chaque fois que je laisse une vue et retourne, la minuterie duplique et devient plus rapide. J'ai essayé d'adresser ceci avec la fonction Timer?.isValid pour exécuter seulement le temporisateur quand il est invalide ainsi il ne duplique jamais, mais il ne peut pas sembler vérifier le temporisateur est invalide dans une déclaration d'if.Vérifiez si Timer est en cours d'exécution

Ceci est l'instruction if que je l'ai utilisé jusqu'à présent:

if (myTimer?.isValid){ 
} else{ 
//start timer 
} 

Toute aide serait appréciée, merci.

+0

Commencez-vous le minuteur dans 'viewWillAppear'? Plus d'informations seront utiles. – Mike

+0

La réaffectation d'une minuterie ou le réglage à zéro ne l'invalidera pas. Configurez la minuterie une fois (dans 'viewDidLoad' par exemple) et invalidez-la quand vous n'en avez pas besoin. – FryAnEgg

Répondre

0

Je recommande d'utiliser l'auto-vérification startTimer() et stopTimer() fonctions, la minuterie sera lancé que si elle est pas en cours d'exécution, la fonction d'arrêt fixe la variable timer de manière fiable à nil.

var timer : Timer? 

func startTimer() 
{ 
    if timer == nil { 
     timer = Timer.scheduledTimer... 
    } 
} 

func stopTimer() 
{ 
    if timer != nil { 
     timer!.invalidate() 
     timer = nil 
    } 
} 
+0

je ne sais pas si vous comprenez, je veux vérifier si une minuterie est en cours d'exécution, pas démarrer/arrêter une minuterie –

+0

Votre code dans la question implique: * Si le minuteur n'est pas valide (ne fonctionne pas), démarrez-le *. C'est exactement ce que fait 'startTimer()'. Dans ma logique suggérée, la minuterie ne fonctionne pas si elle est «nulle». – vadian

+0

Désolé, je comprends maintenant et votre fonction fonctionne! –

1

Vous devez vérifier si votre Timer exemple isValid (pas la classe Timer), disons: if myTimer.isValid? {}.