Подтвердить что ты не робот

Предупреждение Swift 3 для отправки 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!)
                    }
                }
            }

Я получаю это предупреждение в Swift 3:

'default' устарел в iOS 8.0: вместо этого используйте атрибуты qos

в первой строке.

Пока не найдено решения. Кто-нибудь?

4b9b3361

Ответ 1

попробуйте 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!)
                }
            }
        }

Ответ 2

Вместо использования параметра priority:

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

используйте параметр qos, который использует другое перечисление DispatchQoS.QoSClass.default, но вы также можете использовать его значение перечисления только как .default

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

Swift 3 принес много изменений в GCD (Grand Central Dispatch).

Ответ 3

Если вы создаете свойство с помощью Dispatch Framework и обновляете пользовательский интерфейс с некоторой анимацией внутри функции, она может выглядеть примерно так.

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

Ниже код тестируется на Swift 3.0 на 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
            }
        }

где свойство QoS:

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

Подробнее см. яблочный документ.