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]
tapez converson
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
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.