Frage

Ich habe es versucht

var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)

Aber ich habe eine Fehlermeldung erhalten

'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'
War es hilfreich?

Lösung

Das wird funktionieren:

generasacodicetagpre.

Für SWIFT 4 muss das Verfahren, das Sie den Selektor erhalten möchten, objektiv-c ausgesetzt werden müssen. Somit muss der Methodendeklaration generationstätigetagcode hinzugefügt werden.

Andere Tipps

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.

enter image description here

Hier ist der Code dafür:

import UIKit

class ViewController: UIViewController {

    var counter = 0
    var timer = Timer()

    @IBOutlet weak var label: UILabel!

    // start timer
    @IBAction func startTimerButtonTapped(sender: UIButton) {
        timer.invalidate() // just in case this button is tapped multiple times

        // start the timer
        timer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
    }

    // stop timer
    @IBAction func cancelTimerButtonTapped(sender: UIButton) {
        timer.invalidate()
    }

    // called every time interval from the timer
    func timerAction() {
        counter += 1
        label.text = "\(counter)"
    }
}

Verzögertes 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 verwenden repeats: false statt true.

timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(delayedAction), userInfo: nil, repeats: false)

Das obige Beispiel ruft eine Methode mit dem Namen auf delayedAction zwei Sekunden nach dem Einstellen des Timers.Es wird nicht wiederholt, aber Sie können trotzdem anrufen timer.invalidate() wenn Sie die Veranstaltung absagen müssen, bevor sie überhaupt stattfindet.

Notes

  • Wenn die Möglichkeit besteht, dass Ihre Timer-Instanz mehrmals gestartet wird, stellen Sie sicher, dass Sie zuerst die Oldtimer-Instanz ungültig machen.Andernfalls verlieren Sie den Bezug zum Timer und können ihn nicht mehr stoppen.(sehen diese Fragen und Antworten)
  • Verwenden Sie keine Timer, wenn sie nicht benötigt werden.Siehe den Abschnitt Timer der Leitfaden zur Energieeffizienz für iOS-Apps.

Zusammenhang

auf SWIFT 4 aktualisiert, nutzen Sie den Benutzerinfo:

generasacodicetagpre.

Ab IOS 10 gibt es auch eine neue blockierte Timer-Fabrikmethode, die sauberer ist als die Verwendung des Selektors:

generasacodicetagpre.

Swift 3, Pre iOS 10

generasacodicetagpre.

Swift 3, iOS 10 +

generasacodicetagpre.

Notizen

  • es muss auf der Hauptwarteschlange sein
  • Callback-Funktion kann öffentlich sein, privat, ...
  • Callback-Funktion muss generakodicetagcode
  • sein

Überprüfen Sie mit:

swift 2

generasacodicetagpre.

swift 3, 4, 5

generasacodicetagpre.

Sie müssen Timer anstelle von Nstimer in SWIFT 3 verwenden.

Hier ist ein Beispiel:

generasacodicetagpre.

swift 5

Ich bevorzuge den Timer persönlich mit dem Blockverschluss:

generasacodicetagpre.

für Swift 3 und Xcode 8.2 (Schön, Blöcke zu haben, aber wenn Sie für iOS9 kompilieren und Benutzerinfo möchten):

...

generasacodicetagpre.

Simpletimer (SWIFT 3.1)

warum?

Dies ist eine einfache Timer-Klasse in SWIFT, mit der Sie:

  • lokaler Scoped Timer
  • kettenabhängig
  • ein Liner
  • Normale Rückrufe verwenden

nutzung:

generasacodicetagpre.

Code:

generasacodicetagpre.
generasacodicetagpre.

und erstellen Sie Spaß mit dem Namen CreatEenemy

generasacodicetagpre.

in swift 3 so etwas mit @objc:

generasacodicetagpre.

Wenn Sie die Methode des Timers

initieren generasacodicetagpre.

fügen Sie es dann zur Schleife mithilfe des Verfahrens hinzu, das andere Wähler nicht bezeichnet wird

generasacodicetagpre.

Hinweis: Wenn Sie möchten, dass dies wiederholt wird, um Wiederholungen true zu erstellen, und halten Sie die Referenz des Timers ansonsten Update-Methode nicht aufgerufen.

wenn Sie diese Methode verwenden.

generasacodicetagpre.

Halten Sie eine Referenz für die spätere Verwendung, wenn die Wiederholungen wahr ist.

Deklarieren Sie zuerst Ihren Timer

generasacodicetagpre.

Hinzufügen Zeile in viewdidladung () oder in jeder Funktion, die Sie den Timer starten möchten,

generasacodicetagpre.

Dies ist der Func, den Sie anrufen, um etwas zu tun, das es @Objc

sein muss generasacodicetagpre.

Ich habe versucht, in einer NSObject-Klasse zu tun, und das funktionierte für mich:

generasacodicetagpre.

nstimer wurde in SWIFT 4.2 in den Timer umbenannt. Diese Syntax funktioniert in 4.2:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top