J'ai déjà mis à jour XCode 8 et je dois maintenant convertir mon code de Swift 2 à Swift 3.
Avant, lorsque je voulais convertir NSDictionary
en Dictionary
, je viens d'écrire ce qui suit:
let post_paramsValue = post_params as? Dictionary<String,AnyObject?>
où post_params
est NSDictionary
.
Mais maintenant, avec Swift 3, je reçois cette erreur:
NSDictionary is not convertible to Dictionary
Pourquoi? Qu'est-ce qui a changé?
J'ai aussi essayé ce qui suit:
let post_paramsValue = post_params as Dictionary<String,Any>
Mais cela donne cette erreur:
J'ai aussi essayé ce qui suit:
let post_paramsValue = post_params as Dictionary<String,Any>
Où je déclare NSDictionary
au lieu de NSDictionary!
, mais cela ne fonctionne pas; J'ai eu cette erreur:
J'ai aussi essayé ce qui suit:
let post_paramsValue = post_params as Dictionary<String,Any>!
Mais j'ai reçu cette erreur:
NSDictionary
en Objective-C a toujours des valeurs non optionnelles.AnyObject
est devenu Any
dans Swift 3.NSDictionary
peuvent être transformées en pont en Dictionary
let post_paramsValue = post_params as Dictionary<String,Any>
Si la source NSDictionary
est facultative, vous pouvez utiliser as Dictionary<String,Any>?
ou as? Dictionary<String,Any>
ou as! Dictionary<String,Any>
ou as Dictionary<String,Any>!
en fonction du type réel de NSDictionary
.
Pour ceux qui ont un problème avec NSDictionary
, utilisez simplement cette extension:
extension NSDictionary {
var swiftDictionary: Dictionary<String, Any> {
var swiftDictionary = Dictionary<String, Any>()
for key : Any in self.allKeys {
let stringKey = key as! String
if let keyValue = self.value(forKey: stringKey){
swiftDictionary[stringKey] = keyValue
}
}
return swiftDictionary
}
}