2016-07-15 17 views
8

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!

+0

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

+1

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. –

+1

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

Trả lời

3

DispatchTime.now(), cũng như hầu hết mọi phương thức DispatchQueue hoặc DispatchTime, khả dụng cho iOS 7, 8, 9 và 10. Tài liệu chỉ đơn giản là không chính xác.

Các vấn đề liên quan