In früheren Versionen von Swift konnte eine Verzögerung mit dem folgenden Code erzeugt werden:
let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 4 * Int64(NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {
//put your code which should be executed with a delay here
}
Aber jetzt, in Swift 3, ändert Xcode automatisch 6 verschiedene Dinge, aber dann erscheint der folgende Fehler: "Kann nicht DispatchTime.now
in den erwarteten Wert dispatch_time_t
aka konvertieren UInt64
."
Wie kann man eine Verzögerung erzeugen, bevor eine Codesequenz in Swift 3 ausgeführt wird?
DispatchQueue.main.asyncAfter(deadline: when)
Ich mag einzeilige Notation für GCD, es ist eleganter:
Außerdem haben wir in iOS 10 neue Timer-Methoden, z. B. Blockinitialisierer:
(so kann verzögerte Aktion abgebrochen werden)
Übrigens, denken Sie daran: Standardmäßig wird der Timer zum Standard-Run-Loop-Modus hinzugefügt. Dies bedeutet, dass der Timer möglicherweise eingefroren ist, wenn der Benutzer mit der Benutzeroberfläche Ihrer App interagiert (z. B. beim Scrollen einer UIScrollView). Sie können dieses Problem lösen, indem Sie den Timer dem spezifischen Run-Loop-Modus hinzufügen:
In diesem Blogbeitrag finden Sie weitere Details.
quelle
Probieren Sie die folgende in Swift 3.0 und höher implementierte Funktion aus
Verwendungszweck
quelle
Versuchen Sie den folgenden Code für die Verzögerung
quelle
Eine Möglichkeit besteht darin, zu verwenden,
DispatchQueue.main.asyncAfter
wie viele Leute geantwortet haben.Ein anderer Weg ist zu verwenden
perform(_:with:afterDelay:)
. Weitere Details hierquelle
// Führt die Funktion nach x Sekunden aus
//Verwenden:-
quelle