2016-09-30 23 views
30

tôi có mã này:Swift 3 cảnh báo cho văn async

DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.default).async { 
       let url = URL(string: itemImageURL) 
       let data = try? Data(contentsOf: url!) 
       if data != nil { 
        DispatchQueue.main.async{ 
         cell.advImage!.image = UIImage(data: data!) 
        } 
       } 
      } 

tôi nhận được cảnh báo này trong Swift 3:

'mặc định' đã bị phản đối trong iOS 8.0: Sử dụng qos thuộc tính thay vì

trên dòng đầu tiên.

Chưa tìm thấy giải pháp nào. Có ai không?

+0

xem http://stackoverflow.com/questions/39638751/swift-3-can-not-convert-value-of-type-int-to-expected-argument-type-dispatch –

+0

dùng thử và không công việc. câu trả lời được kiểm tra là những gì làm việc tốt cho tôi. – asheyla

Trả lời

60

thử qos: DispatchQoS.QoSClass.default thay vì priority: DispatchQueue.GlobalQueuePriority.default

DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async { 
      let url = URL(string: itemImageURL) 
      let data = try? Data(contentsOf: url!) 
      if data != nil { 
       DispatchQueue.main.async{ 
        cell.advImage!.image = UIImage(data: data!) 
       } 
      } 
     } 
+0

nó đã hoạt động! cảm ơn bạn! – asheyla

+11

Vì '.default' là mặc định, bạn cũng có thể sử dụng:' DispatchQueue.global(). Async {...} ' – breakingobstacles

5

Thay vì sử dụng ưu tiên tham số:

DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.default).async { 
// ... 
} 

sử dụng qos tham số sử dụng một enum khác nhau DispatchQoS.QoSClass.default nhưng bạn cũng có thể sử dụng nó giá trị enum chỉ là .default:

DispatchQueue.global(qos: .default).async { 
// ... 
} 

Swift 3 đã mang lại nhiều thay đổi nào trên GCD (Grand Central Dispatch).

1

Nếu bạn đang tạo thuộc tính bằng cách sử dụng khung công văn và cập nhật giao diện người dùng bằng một số hoạt ảnh trong một hàm, nó có thể trông giống như thế này.

let queue = DispatchQueue.global(qos: DispatchQoS.QoSClass.default) 
    // dispatch_after says that it will send this animation every nsec 
    queue.asyncAfter(deadline: when) { 
     DispatchQueue.main.async(execute: { 
      self.animate(withDuration: 0.5, animations: { 
       self.image.setWidth(35) 
       self.image.setHeight(35) 
      }) 
     }) 
    } 
0

Dưới đây đang thử nghiệm cho Swift 3.0 trên Xcode 8.2.1

DispatchQueue.global(qos: .background).async { 
      let img2 = Downloader.downloadImageWithURL(imageURLs[1]) 

      // Background Thread 
      DispatchQueue.main.async { 

       // Run UI Updates 
       self.imageView2.image = img2 
      } 
     } 

nơi tài sản của QoS là:

background, utility, `default`, userInitiated, userInteractive and unspecified 

Tham khảo apple document này để biết thêm chi tiết.

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