2017-02-03 2 views
0

J'utilise la classe Timer pour exécuter un certain code toutes les x secondes. Quand quelque chose se passe dans ce code, je veux invalider la minuterie, arrêtant ainsi la "boucle".Comment invalider la minuterie sans régler la variable

J'ai réussi à le faire en procédant comme suit:

let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in 

    //when something happens 
    timer.invalidate() 

}) 

Cependant, je ne l'utilise pas cette minuterie nulle part ailleurs dans mon code, si Xcode me donne l'avertissement:

L'initialisation de la valeur immuable 'timer' n'a jamais été utilisée; envisager de remplacer par affectation à '_' ou de le supprimer

Évidemment, cela n'empêche pas mon application de fonctionner, mais je voudrais me débarrasser de l'avertissement.

Je sais que, tout en utilisant:

Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { timer in 
    //do stuff 
}) 

va toujours fonctionner, mais je ne sais pas comment invalider la minuterie. Juste appeler invalidate() à l'intérieur de la fermeture ne fonctionne pas (long-shot je sais, mais je l'ai essayé de toute façon).

Généralement en regardant Timer question sur SO, les gens utilisent des variables de temporisateur global, ce qui le rend facile à invalider. Cependant, je ne veux pas faire cela car ce n'est pas nécessaire parce que, encore une fois, je n'utilise pas l'objet timer une fois qu'il est fini. Je regardais autour de moi, pensant que ce serait un problème assez commun, mais je n'ai rien trouvé d'utile. Quelqu'un peut-il faire la lumière sur la façon dont je pourrais effectivement invalider la minuterie sans définir une variable?

Répondre

4

Vous devez toujours appeler timer.invalidate() mais ici timer fait référence au bloc Timer.

Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: 
{ 
    timer in //This is object that you need to use 

    //do stuff 

    //when something happens 
    timer.invalidate() 
}) 
+0

Ah, ouais j'ai oublié le bloc var. Maintenant, je comprends pourquoi c'est nécessaire;) –

+1

Je vais accepter cette réponse, dans dix minutes, une fois qu'il me laisse –

+0

@BenjaminLowry Bienvenue mate :) –