В соответствии с 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')
Я попытался исправить его, как компилятор предлагает, но, в конце концов, го еще ошибок. Как мне использовать обратную совместимость здесь? Что плохого я делаю? Помогите, спасибо!
'let when = dispatch_time (DISPATCH_TIME_NOW, delay)' – iphonic
Вы пробовали, если 'DispatchTime.now()' работает на iOS 9? Некоторые аннотации доступности неверны. –
Почему вам нужно проверить iOS10 на использование синтаксиса swift3? swift3 действительно поддерживает более низкую версию iOS, например 7 8 9. Если вы хотите скомпилировать новый Xcode8 с swift3, просто напишите только код в синтаксисе SWIFT 3. весь код, который вам нужен: func delay (_ delay: Double, close:() ->()) { DispatchQueue.main.after (когда: DispatchTime.now() + задержка, выполнение: закрытие) } – larva