Swift 3中关于dispatch async的警告

34

我有这段代码:

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中收到了这个警告:

'default'在iOS 8.0中已被弃用: 使用qos属性代替

出现在第一行。

目前还没有找到解决方案。有人有吗?


请查看此链接:https://dev59.com/g1kS5IYBdhLWcg3wl32I - Anbu.Karthik
尝试过了,但没有起作用。被勾选的答案对我来说很好用。 - asheyla
4个回答

68

尝试使用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!)
                }
            }
        }

11
由于.default是默认值,因此您也可以直接使用:DispatchQueue.global().async { ... } - breakingobstacles

5

不要使用priority参数:

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

通过使用 qos 参数,您可以使用不同的枚举值 DispatchQoS.QoSClass.default,但您也可以将其枚举值简写为 .default

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

Swift 3为GCD(Grand Central Dispatch)带来了许多变化。


1
如果您正在使用Dispatch框架创建属性,并在函数中使用某些动画更新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)
            })
        })
    }

1
以下代码是在 Xcode 8.2.1 上使用 Swift 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

请参考苹果文档以获取更多详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接