In Übereinstimmung mit this brillante Antwort auf die Verwendung von dispatch_after
von @matt, habe ich den Code auf dem Spielplatz versucht und es funktioniert gut (keine Fehler). Aber wenn ich versuche, eine Abwärtskompatibilität zu tun, wie DispatchTime.now()
ist nur für iOS 10
nur etwa so:DISPATCH_TIME_NOW in Swift 3 und Rückwärtskompatibilität
func delay(_ delay: Double, closure:() ->()){
guard #available(iOS 10, *) else {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
return
}
let when = DispatchTime.now() + delay
DispatchQueue.main.after(when: when, execute: closure)
}
Der Compiler bietet die DISPATCH_TIME_NOW
-Replace "DISPATCH_TIME_NOW" with "dispatch_time_t(DISPATCH_TIME_NOW)"
zu beheben und wirft einen Fehler sagen
nicht Wert umwandeln kann vom Typ 'Int' bis zum erwarteten Argumenttyp 'dispatch_time_t' (auch bekannt als 'UInt64')
Ich habe versucht, es zu reparieren, wie der Compiler bietet, aber schließlich endete wi th mehr Fehler. Wie soll ich die Rückwärtskompatibilität hier nutzen? Was falsch mache ich? Helfen Sie, danke!
'let when = dispatch_time (DISPATCH_TIME_NOW, delay)' – iphonic
Haben Sie versucht, ob 'DispatchTime.now()' auf iOS 9 läuft? Einige Verfügbarkeitshinweise sind falsch. –
Warum musst du iOS10 überprüfen, um die swift3-Syntax zu verwenden? swift3 ist wirklich Unterstützung für iOS niedrigere Version wie 7 8 9. Wenn Sie in Xcode8 mit swift3 kompilieren möchten, schreiben Sie nur Code in Swift 3 Syntax. all Ihre Code benötigen Sie: Func Verzögerung (_ Verzögerung: Double, Schließung:() ->()) { DispatchQueue.main.after (wenn: DispatchTime.now() + Verzögerung, führen: Schließung) } – larva