我想检查NSUserDefaults是否具有密钥为dic
的值,然后加载数据并保存到loadedDic
如果数据存在,或者设置loadedDic
的值如果没有,请保存到NSUserDefaults
。
使用error!
注释的语句会返回错误消息:
无法将
[String : AnyObject]?
类型的值指定给[String : [String]]
我认为这没关系,因为方法dictionaryForKey
的返回类型表示AnyObject
。仍然不完全理解这种AnyObject类型:(
任何人都可以向我解释是什么造成错误以及我应该如何解决这个问题?提前谢谢。
以下代码块位于viewDidLoad()
类的UIViewController
方法中。
var loadedDic = [String : [String]]()
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.dictionaryForKey("dic") != nil {
print("there's the value i want")
loadedDic = defaults.dictionaryForKey("dic")//error!
}else {
//some codes to set values of 'loadedDic'. this part works properly
defaults.setObject(loadedDic, forKey: "dic")
if defaults.synchronize(){
print("saved")
}
}
答案 0 :(得分:1)
检查从NSUserDefaults
收到的词典的类型是预期类型:
if defaults.dictionaryForKey("dic") != nil {
print("there's the value i want")
if let dic = defaults.dictionaryForKey("dic") as? [String : [String]]{
loadedDic = dic
}
}
答案 1 :(得分:0)
尝试
var loadedDic = [String : AnyObject]()
而不是
var loadedDic = [String : [String]]()
答案 2 :(得分:-1)
你必须这样做。
var loadedDic = Dictionary<String, AnyObject>()
现在,在从NSUserDefault
获取字典时let defaults = NSUserDefaults.standardUserDefaults()
if let dic : Dictionary<String, AnyObject> = defaults.dictionaryForKey("dic") as! Dictionary<String, AnyObject>
{
loadedDic = defaults.dictionaryForKey("dic")
}
else
{
//some codes to set values of 'loadedDic'. this part works properly
// Make sure you store it in Dictionary<String, AnyObject>() manner
defaults.setObject(loadedDic, forKey: "dic")
if defaults.synchronize(){
print("saved")
}
}