2016-07-15 11 views
8

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!

+0

'let when = dispatch_time (DISPATCH_TIME_NOW, delay)' – iphonic

+1

Haben Sie versucht, ob 'DispatchTime.now()' auf iOS 9 läuft? Einige Verfügbarkeitshinweise sind falsch. –

+1

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

Antwort

3

DispatchTime.now(), sowie fast alle DispatchQueue oder DispatchTime Methode, ist für iOS 7, 8, 9 und 10 verfügbar. Dokumentation ist einfach falsch.