web-dev-qa-db-fra.com

Comment obtenir des userinfo NSNotification dans Swift 3

J'ai eu cette erreur dans Swift3:

Cannot convert value of type [AnyHashable : Any] to type NSDictionary in coercion.

Mon code est:

  func downloadProgress(notification:NSNotification){

    if let userInfo = notification.userInfo as NSDictionary
    {
         print(userInfo) // [AnyHashable("progressPercentage"): 0.82530790852915281]

      if let progressValue = userInfo["progressPercentage"] as? Float {
        if progressValue > 0.01{

        }
      }
    }
  }

La valeur actuelle de userInfo est ["progressPercentage": 0.82530790852915281], mais elle est imprimée sous la forme [AnyHashable("progressPercentage"): 0.82530790852915281] et ne satisfait pas la condition if.

Modifier:

Pas de chance pour notification.userInfo as? [AnyHashable: Any], mais fonctionne maintenant pour notification.userInfo as? [String: AnyObject] et notification.userInfo as? [String: Any]

 enter image description here

 enter image description here

6
Muruganandham K

tapez converson

 enter image description here

utilisation 

 func downloadProgress(notification:NSNotification){

if let userInfo = notification.userInfo as [String: Any] // or use if you know the type  [AnyHashable : Any]
{
     print(userInfo) 

  if let progressValue = userInfo["progressPercentage"] as? Float {
    if progressValue > 0.01{

    }
  }
}
 }

pour plus d'informations, consultez/ Documents de référence API

14
Anbu.Karthik

Utilisez plutôt la nouvelle classe Notification au lieu de NSNotification.

Je n'ai pas mon Mac avec moi, mais ceci devrait résoudre le problème.

Cette modification est appliquée automatiquement si vous utilisez l'outil de conversion intégré Xcode Swift.

0
Teejay