Ne peut pas forcer déballer valeur de non-type facultatif: Éviter le “Facultatif()”
J'ai enregistré les compétences d'un joueur dans NSUserDefaults comme un dictionnaire, mais quand je veux y accéder, xcode dit "ne peut pas forcer déballer valeur de non-type facultatif". Quand j'enlève les "!" il écrit "en Option (1)" où je veux me débarrasser de "Facultatif()". Comment puis-je écrire "1"?
if let playerDic = defaults.objectForKey("Player") as? [String: Int] {
lbLevel.setText(String(playerDic!["level"]))
}
se transforme en
"Cannot force unwrap value of non-optional type"
où
if let playerDic = defaults.objectForKey("Player") as? [String: Int] {
lbLevel.setText(String(playerDic["level"]))
}
se transforme en
Optional(1)
OriginalL'auteur Nicklas Mandrup Frederiksen | 2015-11-18
Vous devez vous connecter pour publier un commentaire.
Vous avez déjà déballé playerDic dans le si de laisser de liaison. Il suffit de déposer la force de déballer comme le message d'erreur vous indique.
Mise à jour
Désolé viens de voir votre mise à jour. Donc playerDic n'est pas une option, mais les valeurs renvoyées pour les clés sont fournies en option. Si vous demandez la valeur pour une clé qui n'est pas dans le dictionnaire, vous obtiendrez une option avec la valeur de néant.
Ici vous pouvez lier plusieurs valeurs dans un même si de laisser. Aussi, vous pouvez utiliser des chaînes de caractères(niveau) ou de l'utilisation de la chaîne d'interpolation "(niveau)" selon ce que vous préférez.
avez-vous fait
String(playerDic["level"]!)
note le ! à la finJe ne voudrais pas faire ce que KnightOfDragon suggère. Il n'est pas nécessaire de forcer déballer comme vous pouvez lier la valeur de l'existant si l'instruction. Ce KnightOfDragon suggère va se bloquer lorsque vous essayez d'accéder à une clé qui n'est pas dans le dictionnaire.
OriginalL'auteur Mr Beardsley