404 Stimmen

Wie erstellt man eine Verzögerung in Swift?

Ich möchte meine App an einem bestimmten Punkt pausieren. Mit anderen Worten, meine App soll den Code ausführen, dann an einem bestimmten Punkt 4 Sekunden lang pausieren und dann mit dem Rest des Codes fortsetzen. Wie kann ich das tun?

Ich benutze Swift.

5voto

Jorge CF Punkte 61

Swift 5<

Die Verwendung von Task.sleep blockiert keinen anderen Code außer der aktuellen Aufgabe und ist ziemlich unkompliziert.

//Verzögere die Aufgabe um 4 Sekunden:

Task {
    try await Task.sleep(nanoseconds: 4000000000)
    //Führe deinen Code hier aus
}

1voto

Asio Otus Punkte 111

Als alternative Lösung zu den zuvor vorgeschlagenen Optionen können Sie eine Verzögerung basierend auf der Klasse DispatchGroup verwenden, die dazu dient, die Ausführung mehrerer asynchroner Aufgaben zu synchronisieren:

print("Start")
print(Date())

let delay = DispatchTimeInterval.seconds(3)
let group = DispatchGroup()
group.enter()
_ = group.wait(timeout: .now() + delay)

print("Finish")
print(Date())

Die enter()-Methode wird verwendet, um explizit anzuzeigen, dass die Ausführung des Gruppencodes begonnen hat, und die Methode wait(timeout:) wird verwendet, um auf den Abschluss der Gruppenaufgaben zu warten. Natürlich wird dies in diesem Beispiel nie passieren, dafür wird ein Timeout angegeben, das dem erforderlichen Zeitraum entspricht.

Es ist bequem, dies als fertigen Helfer zu verwenden:

public class DispatchWait {
    private init () { }

    public static func `for` (_ interval: DispatchTimeInterval) {
        let group = DispatchGroup()
        group.enter()
        _ = group.wait(timeout: .now().advanced(by: interval))
    }
}

Ein Beispiel für die Verwendung von DispatchWait:

print("Start")
print(Date())

DispatchWait.for(.seconds(3))

print("Finish")
print(Date())

Leider kann ich nicht sagen, wie genau diese Verzögerung ist und mit welcher Wahrscheinlichkeit die Methode wait(timeout:) die weitere Ausführung des Programms viel später als die angegebene Verzögerung ermöglichen wird.

Diese Lösung ermöglicht es auch, den Code in der aktuellen Warteschlange zu verzögern, ohne ihn in einem separaten Closure ausführen zu müssen.

1voto

Logan Punkte 63

Dies ist eine einfachere Möglichkeit, um eine Verzögerung hinzuzufügen, die die Thread-Ausführung nicht beeinträchtigt.

let continueTime: Date = Calendar.current.date(byAdding: .second, value: 30, to: Date())!
while (Date() < continueTime) {
    //NICHTS TUN
}

-5voto

taha Punkte 23

Dies ist das einfachste

    delay(0.3, closure: {
        // Setze hier beliebigen Code, den du mit Verzögerung ausführen möchtest
        button.removeFromSuperview()   
    })

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X