我已经将NSUserDefaults中的玩家技能保存为字典,但是当我想访问它时,xcode表示"不能强制解包非可选类型的值"。当我删除"!"它写出"可选(1)"在哪里我想摆脱" Optional()"。我怎样才能写出" 1"?
if let playerDic = defaults.objectForKey("Player") as? [String: Int] {
lbLevel.setText(String(playerDic!["level"]))
}
变成
"Cannot force unwrap value of non-optional type"
,其中
if let playerDic = defaults.objectForKey("Player") as? [String: Int] {
lbLevel.setText(String(playerDic["level"]))
}
变成
Optional(1)
答案 0 :(得分:5)
你已经在if let绑定中打开了playerDic。只需按照错误消息告诉您放下力量展开。
if let playerDic = defaults.objectForKey("Player") as? [String: Int] {
lbLevel.setText(String(playerDic["level"]))
}
<强>更新强> 抱歉,只看到了您的更新。所以playerDic不是可选的,但为键返回的值是可选项。如果你要求一个不在字典中的键的值,你将获得一个值为nil的可选值。
if let
playerDic = defaults.objectForKey("Player") as? [String: Int],
level = playerDic["level"] {
lbLevel.setText("\(level)")
}
在这里,您可以在单个if中绑定多个值。此外,您可以使用String(级别)或使用字符串插值&#34;(级别)&#34;取决于你喜欢什么。
答案 1 :(得分:0)
您正试图将可选参数传递给不接收nil
:String(optional)
的方法来解决此问题,只需在String(optional!)
:末尾用(!)将其解包即可。
if let playerDic = defaults.objectForKey("Player") as? [String: Int] {
lbLevel.setText(String(playerDic["level"]!)) <-- the bang at the end
}