Theo câu trả lời xuất sắc this về cách sử dụng dispatch_after
bởi @matt, tôi đã thử mã trên sân chơi và hoạt động tốt (không có lỗi). Nhưng khi tôi cố gắng để làm một khả năng tương thích ngược như DispatchTime.now()
chỉ có sẵn cho iOS 10
chỉ như vậy:DISPATCH_TIME_NOW nhanh chóng 3 và tương thích ngược
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)
}
Trình biên dịch cung cấp để sửa chữa DISPATCH_TIME_NOW
-Replace "DISPATCH_TIME_NOW" with "dispatch_time_t(DISPATCH_TIME_NOW)"
và ném một lỗi nói
Không thể chuyển đổi giá trị loại 'Int' thành loại đối số dự kiến 'dispatch_time_t' (aka 'UInt64')
Tôi đã cố sửa nó như trình biên dịch cung cấp nhưng cuối cùng đã kết thúc bằng wi th nhiều lỗi hơn. Tôi nên sử dụng tính tương thích ngược ở đây như thế nào? Tôi đang làm gì sai? Xin giúp đỡ, cảm ơn!
'let when = dispatch_time (DISPATCH_TIME_NOW, delay)' – iphonic
Bạn đã thử nếu 'DispatchTime.now()' chạy trên iOS 9 chưa? Một số chú thích về tính khả dụng là sai. –
lý do tại sao bạn cần kiểm tra iOS10 để sử dụng cú pháp swift3? swift3 thực sự hỗ trợ cho phiên bản iOS thấp hơn như 7 8 9. Nếu bạn muốn biên dịch trong Xcode8 mới với swift3, chỉ cần viết mã chỉ bằng cú pháp 3 nhanh. tất cả mã bạn cần: func delay (_ delay: Double, closure:() ->()) { DispatchQueue.main.after (khi: DispatchTime.now() + delay, execute: closure) } – larva