ios - NSUserDefaults.standardUserDefaults().dictionaryForKey() 返回编译错误

标签 ios swift nsuserdefaults

我想检查 NSUserDefaults 是否有 dic 键的值,如果存在则加载数据并保存到 loadedDic 中,或者设置值loadedDic 并保存到 NSUserDefaults(如果没有)。

error! 注释的语句返回错误消息:

cannot assign value of type [String : AnyObject]? to [String : [String]]

我认为这应该没问题,因为方法 dictionaryForKey 的返回类型为 AnyObject。还是没有完全理解这个 AnyObject 类型:(

谁能向我解释一下错误的原因以及我应该如何解决这个问题?提前致谢。

以下代码块位于 UIViewController 类的 viewDidLoad() 方法中。

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")
  }
}

最佳答案

检查从 NSUserDefaults 接收到的字典类型是否为预期类型:

if defaults.dictionaryForKey("dic") != nil {
    print("there's the value i want")
    if let dic = defaults.dictionaryForKey("dic") as? [String : [String]]{
       loadedDic = dic
    }
}

关于ios - NSUserDefaults.standardUserDefaults().dictionaryForKey() 返回编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38583117/

相关文章:

ios - *** -[__NSArrayM objectAtIndex :]: index 51 beyond bounds [0 . 。 50] 使用 UIsearchbar 和 UItableview 时出错

javascript - 在 Xamarin.Forms IOS WebViewRenderer 中调用 JavaScript 函数

swift - 使用两个类创建协议(protocol)

swift - 我需要将参数数量传递给相当于变量数组计数的函数

iphone - 使用 NSUserDefault : Good or Bad idea? 保存游戏进度

ios - 为 CoreText 创建 CGContext

iOS:如何在接近商店时通知用户

ios - 在 iPad 上共享工作表崩溃

ios - 应用程序委托(delegate)和 View Controller 之间的 NSUserDefaults

ios - Google 同意 SDK : How to Save 'Status' Array in UserDefaults?