Swift 3警告调度asynchronous
我有这个代码:
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!) } } }
我在Swift 3中得到这个警告:
iOS 8.0中不推荐使用“默认”:改为使用qos属性
在第一行。
还没有find解决办法。 有人吗?
尝试qos: DispatchQoS.QoSClass.default
而不是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!) } } }
而不是使用优先级参数:
DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.default).async { // ... }
使用使用不同的枚举DispatchQoS.QoSClass.default
qos
参数,但是也可以使用它的枚举值.default
:
DispatchQueue.global(qos: .default).async { // ... }
Swift 3为GCD带来了很多变化(Grand Central Dispatch)。
如果您使用Dispatch Framework创build一个属性,并在一个函数内用一些animation更新UI,它可能看起来像这样。
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) }) }) }
下面的代码在Xcode 8.2.1上testingSwift 3.0
DispatchQueue.global(qos: .background).async { let img2 = Downloader.downloadImageWithURL(imageURLs[1]) // Background Thread DispatchQueue.main.async { // Run UI Updates self.imageView2.image = img2 } }
QoS的属性是:
background, utility, `default`, userInitiated, userInteractive and unspecified
请参阅这个苹果文件的更多细节。