根据@matt对dispatch_after
用法的这个精彩回答,我在playground上尝试了一下代码,它可以正常工作(没有错误)。但是当我尝试进行向后兼容,因为DispatchTime.now()
仅适用于iOS 10
,如下所示:
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
更改为 dispatch_time_t(DISPATCH_TIME_NOW)
, 并报错如下:
我尝试按照编译器建议进行修复,但最终出现了更多错误。在这种情况下,我应该如何使用向后兼容性?我做错了什么?请帮忙解决,谢谢!无法将类型为 'Int' 的值转换为预期的参数类型 'dispatch_time_t' (也称为 'UInt64')
let when = dispatch_time(DISPATCH_TIME_NOW, delay)
- iphonicDispatchTime.now()
吗?一些可用性注释是错误的。 - Martin R