Swift 3 warning for dispatch async

匿名 (未验证) 提交于 2019-12-03 02:49:01

问题:

I have this code:

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!)                     }                 }             } 

I get this warning in Swift 3:

'default' was deprecated in iOS 8.0: Use qos attributes instead

on the first line.

Haven't found yet a solution. Has anybody?

回答1:

try qos: DispatchQoS.QoSClass.default instead of 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!)                 }             }         } 


回答2:

Instead of using priority parameter:

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

use qos parameter that uses a different enum DispatchQoS.QoSClass.default but you can also use its enum value as just .default:

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

Swift 3 has brought many changes on GCD(Grand Central Dispatch).



回答3:

If you're creating a property using the Dispatch Framework and updating the UI with some animation within a function it might look something like this.

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)             })         })     } 


回答4:

Below code is tested for Swift 3.0 on 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             }         } 

where property of QoS are :

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

Refer this apple document for more details.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!