2015-07-02 13 views
12

Jak sprawdzić, czy NSTimer pracuje lub nie w Swift. W obj-c kod powinien być taki jak ja zgadnę:Jak sprawdzić, czy NSTimer działa, czy nie w Swift?

if (!myTimer) { 
    //DO 
} 

Próbuję ustawić go w Swift jak to i to pokazywanie błędów.

if !myTimer { 
// DO 
} 
+0

Podaj wszystkie istotne informacje, które obejmowałyby faktyczny pełny komunikat o błędzie. – zaph

+0

@amro shahbari Swift 3.1 nie działa –

Odpowiedz

25

Co robię (w obu językach), aby mój zegar był słaby. W szybkim tempie byłaby to słaba opcja.

weak var myTimer: NSTimer? 

Potem stworzyć czasomierz z

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

a następnie można użyć

if timer == nil 

powiedzieć, czy to działa.

Aby zatrzymać stoper po prostu zadzwonić

myTimer?.invalidate() 

w Objective-C byłoby

[myTimer invalidate]; 

To działa w Objective-C, ponieważ wysyłanie wiadomości do zera wskaźników jest ważny, a tylko robi nic.

Jeśli nie chcesz używać słabego opcjonalnego, możesz wysłać zapytanie do licznika czasu, aby sprawdzić, czy działa, patrząc na jego właściwość valid.

+2

Tylko dlatego 'timer' nie jest zerowa nie powiedzieć, jeśli jest uruchomiony. – zaph

+3

Dzieje się tak, jeśli sprawisz, że będzie słaby. Wtedy jedyną referencją jest pętla uruchamiania, a po uruchomieniu, gdy zostanie unieważniona, zostaje zwolniona i usunięta. Jest przydatny. –

+0

Nie, ze słabym wskaźnikiem, \t timerWithTimeInterval: Cel: selektora: userinfo: powtarza: tworzy czasomierz, który jest natychmiast zwalniane, ponieważ ma silne referencje zerowe .. To jest zdegenerowany przypadek. Spróbuj tego, co opisuję. To działa. Obiecuję. –

2
if !myTimer.valid { 
    //DO 
} 
+0

Aby to działało, 'myTimer' musi być zadeklarowane jako własność' weak'. – zaph

+0

@zaph, to jest złe. Przy takim podejściu czasomierz ** nie może ** zostać uznany za słaby. –

11

Co z poniższą opcją? Czy widzisz, czy to działa?

if myTimer.valid { 
} 
+0

Aby to działało, 'myTimer' musi być zadeklarowane jako własność' weak'. – zaph

+3

@zaph, nie. Moje podejście do osłabienia i sprawdzenia zerowej ilości działa, LUB możesz go wzmocnić, a następnie sprawdzić, czy timer.valid == true. Użycie 'myTimer.valid' nie ** NIE ** wymaga, aby' mójTimer' był słaby. –

Powiązane problemy