próbowałem
var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)
Ale mam błąd mówiąc
'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'
ios
nstimer
nstimeinterval
swift
użytkownik3225917
źródło
źródło
Odpowiedzi:
To zadziała:
W przypadku Swift 4 metoda, którą chcesz uzyskać, musi być wystawiona na cel C, a zatem
@objc
atrybut musi zostać dodany do deklaracji metody.źródło
Powtarzające się wydarzenie
Możesz użyć timera, aby wykonać akcję wiele razy, jak pokazano w poniższym przykładzie. Timer wywołuje metodę aktualizacji etykiety co pół sekundy.
Oto kod do tego:
Opóźnione zdarzenie
Możesz także użyć timera, aby zaplanować jednorazowe wydarzenie na jakiś czas w przyszłości. Główną różnicą w stosunku do powyższego przykładu jest to, że używasz
repeats: false
zamiasttrue
.Powyższy przykład wywołuje metodę nazwaną
delayedAction
dwie sekundy po ustawieniu timera. To się nie powtarza, ale możesz zadzwonić,timer.invalidate()
jeśli musisz anulować wydarzenie, zanim ono nastąpi.Notatki
Związane z
źródło
Zaktualizowano do Swift 4, wykorzystując userInfo:
źródło
NSTimer
obiektuW systemie iOS 10 dostępna jest również nowa metoda oparta na blokach, która jest bardziej przejrzysta niż użycie selektora:
źródło
_ =
i zacząć od początkuTimer
?Swift 3, wcześniejszy niż iOS 10
Swift 3, iOS 10+
Notatki
@objc
źródło
timeInterval
Sprawdź z:
Swift 2
Swift 3, 4, 5
źródło
self
być? UIView jest w porządku?W Swift 3 będziesz musiał użyć Timera zamiast NSTimer.
Oto przykład:
źródło
Szybki 5
Osobiście wolę Timer z zamknięciem blokowym:
źródło
dla swift 3 i Xcode 8.2 (fajnie mieć bloki, ale jeśli kompilujesz dla iOS9 ORAZ chcesz userInfo):
...
źródło
SimpleTimer (Swift 3.1)
Czemu?
Jest to prosta klasa timera w trybie szybkim, która umożliwia:
Stosowanie:
Kod:
źródło
I stwórz zabawę po nazwie createEnemy
źródło
Najpierw zadeklaruj swój licznik czasu
Następnie dodaj wiersz w viewDidLoad () lub w dowolnej funkcji, którą chcesz uruchomić stoper
Jest to funkcja, którą oddzwonisz, aby zrobić coś, co musi być @objc
źródło
W Swift 3 coś takiego z @objc:
źródło
Jeśli zainicjujesz metodę timera
następnie dodaj go do pętli, używając metody inny selektor nie będzie wywoływany
UWAGA: Jeśli chcesz, aby to powtarzało się, powtórz prawdę i zachowaj odniesienie do timera, w przeciwnym razie metoda aktualizacji nie zostanie wywołana.
Jeśli używasz tej metody.
zachowaj odniesienie do późniejszego użycia, jeśli powtórzenia są prawdziwe.
źródło
Próbowałem zrobić w klasie NSObject i to zadziałało dla mnie:
źródło
NSTimer został przemianowany na Timer w Swift 4.2. ta składnia będzie działać w wersji 4.2:
źródło