【问题标题】:UserDefaults won't retrieve my string array correctlyUserDefaults 不会正确检索我的字符串数组
【发布时间】:2018-12-03 05:41:03
【问题描述】:

我正在尝试创建一种机制,让用户将项目保存到收藏夹(这是一个数组),然后将其保存到 UserDefaults,但是我似乎无法让它正确地写入 UD。在下面的示例中打印 UDSaved 会返回 [],即使我只是在数组中添加了一个元素。

有人知道我做错了什么吗?

这是语法错误,我没有正确检索它还是我的逻辑有问题?

var favouritesArray: [String] = []

func UDWrite() {UserDefaults.standard.set(favouritesArray, forKey: "UDfavouritesArray")}
let UDSaved = UserDefaults.standard.stringArray(forKey: "UDfavouritesArray") ?? [String]()


favouritesArray.append("element")
UDWrite()

print(UDSaved)

【问题讨论】:

  • 更新默认值后,您似乎没有重新阅读 UDSaved。
  • 你正在保存空数组然后获取它,然后添加字符串,尝试添加 favouritesArray.append("element"),在 var favouritesArray: [String] = []
  • 您执行以下操作:创建一个空数组a。将a 写入字典。通过从字典中读取 a 创建一个数组 b。在a 上附加一些内容。打印b
  • @DavidStockinger 创建 a 后不会调用将 a 写入字典的函数,而是在我将某些内容附加到 a 后调用它。所以顺序是: - 创建一个空数组 A - 通过从字典中读取 A 创建一个数组 B - 将一些内容附加到 A - 将 A 写入字典 BI 意识到虽然我需要将 A 的值分配给 B 作为我的一部分功能,这似乎有效。

标签: arrays swift nsuserdefaults


【解决方案1】:

正如 cmets 中的一些声明:UDSaved 永远不会得到更新。我的解决方案是让UDSaved 成为这样的函数:

var favouritesArray: [String] = []

func UDWrite() {UserDefaults.standard.set(favouritesArray, forKey: "UDfavouritesArray")}
func UDSaved() -> [String] {return UserDefaults.standard.stringArray(forKey: "UDfavouritesArray") ?? [String]}()

favouritesArray.append("element")
UDWrite()

print(UDSaved())

或者您可以将其设为计算属性

var UDSaved: [String] {
   return UserDefaults.standard.stringArray(forKey: "UDfavouritesArray") ?? [String]
}

【讨论】:

  • 谢谢你,以及所有评论的人。我现在明白了我的错误,我通过将 UDSaved = favouritesArray 添加到我的 UDWrite() 函数来修复它,这解决了问题。
  • 好吧 UDSaved = favouritesArray 只要您的应用程序正在运行就可以提供帮助,但这无助于在重新启动您的应用程序后恢复状态!
  • @CristianMoisei 我强烈建议不要这样做。当您可以避免修改函数内部的外部变量时,您应该这样做以保持函数纯净。将UDSaved 设为计算属性是一个更好的解决方案。
  • 你是对的@HerrderTöne 我会花一些时间来围绕你的解决方案(我对此比较陌生)并这样做。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多