34 votes

Avertissement de Swift 3 concernant l'asynchronisme de la distribution

J'ai ce 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!)
                    }
                }
            }

Je reçois cet avertissement dans Swift 3 :

L'option "default" est obsolète dans iOS 8.0 : utilisez les attributs qos à la place.

sur la première ligne.

Je n'ai pas encore trouvé de solution. Quelqu'un l'a fait ?

66voto

iPao Points 1096

Essayez qos: DispatchQoS.QoSClass.default au lieu de 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!)
                }
            }
        }

5voto

Wilson Points 6094

Au lieu d'utiliser priorité paramètre :

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

utiliser qos qui utilise un enum différent DispatchQoS.QoSClass.default mais vous pouvez aussi utiliser sa valeur d'enum comme juste .default :

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

Swift 3 a apporté de nombreux changements sur GCD (Grand Central Dispatch).

1voto

tymac Points 7397

Si vous créez une propriété à l'aide du Dispatch Framework et que vous mettez à jour l'interface utilisateur à l'aide d'une animation dans une fonction, cela peut ressembler à ceci.

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

1voto

Jayprakash Dubey Points 1194

Le code ci-dessous est testé pour Swift 3.0 sur 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
            }
        }

propriété de la QoS sont :

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

Référez-vous à ce document de pomme pour plus de détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X