Ich habe es versucht
var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)
Aber ich habe einen Fehler bekommen
'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'
ios
nstimer
nstimeinterval
swift
user3225917
quelle
quelle
Antworten:
Das wird funktionieren:
Für Swift 4 muss die Methode, für die Sie den Selektor erhalten möchten, Objective-C verfügbar gemacht werden. Daher
@objc
muss der Methodendeklaration ein Attribut hinzugefügt werden.quelle
Wiederholtes Ereignis
Sie können einen Timer verwenden, um eine Aktion mehrmals auszuführen, wie im folgenden Beispiel gezeigt. Der Timer ruft eine Methode auf, um eine Beschriftung jede halbe Sekunde zu aktualisieren.
Hier ist der Code dafür:
Verspätetes Ereignis
Sie können auch einen Timer verwenden, um ein einmaliges Ereignis für einige Zeit in der Zukunft zu planen. Der Hauptunterschied zum obigen Beispiel besteht darin, dass Sie
repeats: false
anstelle von verwendentrue
.Im obigen Beispiel wird eine Methode mit dem Namen
delayedAction
zwei Sekunden nach dem Einstellen des Timers aufgerufen. Es wird nicht wiederholt, aber Sie können trotzdem anrufentimer.invalidate()
wenn Sie das Ereignis abbrechen müssen, bevor es jemals auftritt.Anmerkungen
verbunden
quelle
Aktualisiert auf Swift 4 unter Nutzung von userInfo:
quelle
NSTimer
Objekt erwartetAb iOS 10 gibt es auch eine neue blockbasierte Timer-Factory-Methode, die sauberer ist als die Verwendung des Selektors:
quelle
_ =
und einfach damit zu beginnenTimer
?Swift 3, vor iOS 10
Swift 3, iOS 10+
Anmerkungen
@objc
quelle
timeInterval
Überprüfen Sie mit:
Swift 2
Swift 3, 4, 5
quelle
self
sein? UIView ist in Ordnung?In Swift 3 müssen Sie Timer anstelle von NSTimer verwenden.
Hier ist ein Beispiel:
quelle
Swift 5
Ich persönlich bevorzuge den Timer mit dem Blockschluss:
quelle
für Swift 3 und Xcode 8.2 (schön, Blöcke zu haben, aber wenn Sie für iOS9 kompilieren UND userInfo wollen):
...
quelle
SimpleTimer (Swift 3.1)
Warum?
Dies ist eine einfache Timer-Klasse in Swift, mit der Sie:
Verwendung:
Code:
quelle
Und Spaß mit dem Namen createEnemy schaffen
quelle
Deklarieren Sie zuerst Ihren Timer
Fügen Sie dann eine Zeile in viewDidLoad () oder in einer beliebigen Funktion hinzu, mit der Sie den Timer starten möchten
Dies ist die Funktion, die Sie zurückrufen werden, um etwas zu tun, das @objc sein muss
quelle
In Swift 3 so etwas mit @objc:
quelle
Wenn Sie die Methode des Timers einleiten
Fügen Sie es dann mit der Methode zur Schleife hinzu. Ein anderer Selektor wird nicht aufgerufen
HINWEIS: Wenn Sie möchten, dass sich dies wiederholt, machen Sie Wiederholungen wahr und behalten Sie die Referenz des Timers bei, da sonst die Aktualisierungsmethode nicht aufgerufen wird.
Wenn Sie diese Methode verwenden.
Bewahren Sie eine Referenz für die spätere Verwendung auf, wenn Wiederholungen zutreffen.
quelle
Ich habe versucht, in einer NSObject-Klasse zu arbeiten, und das hat bei mir funktioniert:
quelle
NSTimer wurde in Swift 4.2 in Timer umbenannt. Diese Syntax funktioniert in 4.2:
quelle