web-dev-qa-db-ja.com

Swift 3ディスパッチ非同期の警告

私はこのコードを持っています:

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属性を使用してください

最初の行に。

まだ解決策が見つかりません。誰かいますか?

32
asheyla

試してください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!)
                }
            }
        }
64
iPao

priorityパラメーターを使用する代わりに:

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

qos別の列挙型を使用するパラメーターを使用DispatchQoS.QoSClass.defaultただし、その列挙値を.default

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

Swift 3はGCD(Grand Central Dispatch)に多くの変更をもたらしました。

5
Wilson

以下のコードは、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

詳細は Appleドキュメント を参照してください。

1

Dispatch Frameworkを使用してプロパティを作成し、関数内のアニメーションで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
tymac