2016-09-30 1 views
30

J'ai ce code:Swift 3 avertissement pour l'expédition 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!) 
        } 
       } 
      } 

Je reçois cet avertissement à Swift 3:

'default' a été dépréciée dans iOS 8.0: Utiliser les attributs QOS à la place

sur la première ligne.

N'ont pas encore trouvé de solution. Quelqu'un a-t-il?

+0

voir cette http://stackoverflow.com/questions/39638751/swift-3-can-not-convert-value-of-type-int-to-expected-argument-type-dispatch –

+0

a essayé et n'a pas travail. la réponse vérifiée est ce qui a bien fonctionné pour moi. – asheyla

Répondre

60

essayer 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!) 
       } 
      } 
     } 
+0

ça a marché! Je vous remercie! – asheyla

+11

Comme '.default' est la valeur par défaut, vous pouvez également utiliser:' DispatchQueue.global(). Async {...} ' – breakingobstacles

5

Au lieu d'utiliser priorité paramètre:

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

, utilisez le paramètre qos qui utilise un autre ENUM DispatchQoS.QoSClass.default mais vous pouvez également utiliser son valeur enum comme juste .default:

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

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

1

Si vous créez une propriété à l'aide de Dispatch Framework et mettez à jour l'interface utilisateur avec une animation au sein d'une fonction, elle 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) 
      }) 
     }) 
    } 
0

Ci-dessous le code 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 QoS sont:

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

Conseiller cet apple document pour plus de détails.