2016-07-15 3 views
8

thisによると、@mattのdispatch_afterの使用についての鮮明な答えは、私が遊び場でコードを試したところ、問題なく動作します(エラーなし)。私はDispatchTime.now()として、下位互換性をしようとするときだけだけなので、のようなiOS 10のために提供されています:速攻3のDISPATCH_TIME_NOWと下位互換性

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) 
} 

コンパイラはReplace "DISPATCH_TIME_NOW" with "dispatch_time_t(DISPATCH_TIME_NOW)"DISPATCH_TIME_NOWを修正するために提供しており、

が値を変換できませんというエラーがスローされます'Intnt'型の予想される引数型 'dispatch_time_t'(別名 'UInt64')

コンパイラが提供するように修正しようとしましたが、より多くのエラー。ここで後方互換性はどのように使うべきですか?私は何をしていますか?助けてください、ありがとう!

+0

'when = dispatch_time(DISPATCH_TIME_NOW、delay)' – iphonic

+1

'DispatchTime.now()'がiOS 9で実行されたことがありますか?一部の可用性注釈が間違っています。 –

+1

なぜswift3構文を使用するにはiOS10をチェックする必要がありますか? swift3はiOS 7,8のような下位バージョンをサポートしています。swift3で新しいXcode8でコンパイルしたい場合は、コードをswift 3の構文で書くだけです。あなたが必要とする全てのコード:func delay(_ delay:double、closure:() - >()){ DispatchQueue.main.after(DispatchTime.now()+ delay、execute:closure) } – larva

答えて

3

DispatchTime.now()とほぼ同様に、DispatchQueueまたはDispatchTimeの方法は、iOS 7,8,9,10で利用できます。ドキュメントは単に間違っています。