2016-07-15 4 views
8

В соответствии с this блестящий ответ на использование dispatch_after by @matt, я пробовал код на игровой площадке, и он отлично работает (без ошибок). Но когда я пытаюсь сделать обратную совместимость, как DispatchTime.now() доступна только для iOS 10 только так:DISPATCH_TIME_NOW в быстрой версии 3 и обратная совместимость

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

Компилятор предлагает зафиксировать DISPATCH_TIME_NOW к Replace "DISPATCH_TIME_NOW" with "dispatch_time_t(DISPATCH_TIME_NOW)" и выдает ошибку о том,

Не может преобразовать значение типа 'Int' до ожидаемого типа аргумента 'dispatch_time_t' (aka 'UInt64')

Я попытался исправить его, как компилятор предлагает, но, в конце концов, го еще ошибок. Как мне использовать обратную совместимость здесь? Что плохого я делаю? Помогите, спасибо!

+0

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

+1

Вы пробовали, если 'DispatchTime.now()' работает на iOS 9? Некоторые аннотации доступности неверны. –

+1

Почему вам нужно проверить iOS10 на использование синтаксиса swift3? swift3 действительно поддерживает более низкую версию iOS, например 7 8 9. Если вы хотите скомпилировать новый Xcode8 с swift3, просто напишите только код в синтаксисе SWIFT 3. весь код, который вам нужен: func delay (_ delay: Double, close:() ->()) { DispatchQueue.main.after (когда: DispatchTime.now() + задержка, выполнение: закрытие) } – larva

ответ

3

DispatchTime.now(), а также практически любой метод DispatchQueue или DispatchTime, доступен для iOS 7, 8, 9 и 10. Документация просто неверна.

 Смежные вопросы

  • Нет связанных вопросов^_^