2017-03-28 1 views
3

Derzeit wird diese verwende ich für 5 Sekunden auf dem Hintergrund-Thread zu warten, bevor Sie eine Funktion aufrufen: DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 5, execute: {Warten auf Hintergrund-Thread für eine zufällige Zeit

Dies funktioniert gut, aber ich würde für eine zufällige Dauer warten möchten jedes Mal. mache ich etwas wie folgt aus:

let randomTime = Int(arc4random_uniform(10)) 
DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + randomTime, execute: { 

gibt mir den Fehler: Type of expression is ambiguous without more context

Beifall.

+0

Versuchen Sie 'TimeInterval (arc4random_uniform (10))' stattdessen. Der Fehler bedeutet, dass der Compiler nicht sicher ist, was Sie tun möchten. Aber ich habe diesen Fehler nie in einer so einfachen Codezeile gesehen. – TheValyreanGroup

Antwort

2

Try Code unten ausgedrückt:

let randomTime = Int(arc4random_uniform(10)) 

    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(randomTime)) { 

    print("Delay is \(randomTime) sec") 

     //Do something here 
    } 

Sie auch .microseconds(Int) und .nanoseconds(Int) hängt von Ihrer Anforderung verwenden können.

+0

Perfekt. Vielen Dank! – P3rry

+0

DispatchQueue.main.asyncAfter (Deadline: .now() + .seconds (randomTime)) löst den folgenden Fehler aus "Typ des Ausdrucks ist mehrdeutig ohne mehr Kontext" - hauptsächlich das + im Folgenden: .now() + .seconds (ZufallsZeit) – iosforme

0

.now() gibt einen DispatchTime-Typ zurück. Etwas wie

DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime(uptimeNanoseconds: [any_random_generator]...... 

sollte tun. beachten Sie, dass any_random_generator muss UInt64 zurückkehren und dass die Zeit in Nanosekunden

0

bei der Dokumentation der Suche nach Dispatch, erscheint es zwei Überladungen für die + Betreiber zu sein, die für Sie arbeiten würde:

public func +(time: DispatchTime, interval: DispatchTimeInterval) -> DispatchTime 

public func +(time: DispatchTime, seconds: Double) -> DispatchTime 

Ich schlage vor, die zweite Funktion und einen Double statt Int wie Sie initialisieren‘ versuchen, jetzt zu tun:

let randomTime = Double(arc4random_uniform(10)) 
Verwandte Themen