【问题标题】:NSUserDefault critical coding in ios9 swift?ios9 swift中的NSUserDefault关键编码?
【发布时间】:2015-12-04 14:00:12
【问题描述】:

我正在关注一个教程,其中我将数据保存在具有以下代码的 NSUserDefault 类型中。它有 cmets,但我不知道这里发生了什么-

var todoDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey(ITEMS_KEY) ?? Dictionary() // if todoItems hasn't been set in user defaults, initialize todoDictionary to an empty dictionary using nil-coalescing operator (??)

        todoDictionary[item.UUID] = ["deadline": item.deadline, "title": item.title, "UUID": item.UUID] // store NSData representation of todo item in dictionary with UUID as key
        NSUserDefaults.standardUserDefaults().setObject(todoDictionary, forKey: ITEMS_KEY)

NSUserDefaults.standardUserDefaults().setObject(todoDictionary, forKey: ITEMS_KEY)

那么这里实际发生的事情可以请任何人解释一下。
ITEMS_KEY 在这里做什么?

【问题讨论】:

  • @lukesIvi 这篇文章甚至不是关于 CoreData,而是关于 NSUserDefaults。再次阅读问题。

标签: swift ios9 nsuserdefaults


【解决方案1】:

第 1 行从 UserDefaults 中检索带有键 ITEMS_KEY 的字典,如果失败,它会实例化一个空的 Dictionary()。这就是空合并运算符的含义。 ITEMS_KEY 是您可能在某处设置的属性(常量)。

第 2 行正在为字典设置键值。

第 3 行正在将字典写回 NSUserDefaults。

第 4 行是双行的?不确定这是否正确。

【讨论】:

  • UUID 是每个项目的唯一标识符。那么为什么要写 todoDictionary[item.UUID]= 。我们不能写成 todoDictionary[]= 吗?以这种方式编写代码有什么不同?请检查为该行编写的注释。您能否对该部分行进行更多解释。
  • 当您执行该行代码时,会发生以下情况: 1) 字典获得一个密钥,该密钥是您设备的 UUID。 2) 该键的值是一个包含项目的数组。这样,应用程序就可以访问该字典并获取您保存在那里的数据(数组)。
  • 很抱歉打断你,但你没听明白。根据教程,它为特定字典中的每个项目提供了一个唯一的 UUID。这样我就可以在我的应用程序运行时从磁盘存储中加载我的项目。很好,但我要问的是,如果是这种情况,那么当您将表达式编写为 tododictionary[items.UUID] 时实际会发生什么?您可以标记 todoDictionary 为每个项目(如日期、标题、其 UUID)获取值。
  • 很好,但它还在该特定注释中写道,它提供 UUID 作为字典中每个项目的键。所以我认为 todoDictionary 是一个字典,其中包含许多项字典,其中包含各自的键,即它们的 UUID。所以现在我想知道将值添加到 todoDictionary 作为 todoDictionary[item.UUID] 的语法。因此,根据评论突出显示这一点。并检查一下我的理论。如果我错了,请纠正我。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
相关资源
最近更新 更多