【问题标题】:Moving UserDefaults to an array将 UserDefaults 移动到数组
【发布时间】:2021-06-25 18:17:50
【问题描述】:

我在尝试将用户默认数组移动到第二个数组时遇到问题,因此我可以将其加载到表格视图中。

我的 userdefault 只是一个 Int 类型的字段。我能够将数据存储在 UD 中,当我显示它时,它会显示可选值: [176, 177]

我在视图的顶层声明了以下内容:

let defaults = UserDefaults.standard
   
var intArray = [[Int:Any]]()

在 viewDidLoad 我有以下内容:

override func viewDidLoad() {
        super.viewDidLoad()
      intArray = defaults.array(forKey: "Favorites") as? [[Int: Any]] ?? []
      print(defaults.array(forKey: "Favorites"))
   }

intArray 始终为空,但是当我打印收藏夹 UserDefault 时,它会像上面那样显示。

显然,我在这里做错了;任何帮助将不胜感激。

【问题讨论】:

  • 现在,您正在尝试解码以Int 作为键和Any 作为值的字典数组(外括号是数组,内括号是@987654326 @ 是字典)。如果将[[Int:Array]] 替换为[Int] 是否有效?
  • 不,它显示相同的 o intArray [[Int]] 0 个值
  • 看起来您刚刚评论的内容中还有一组额外的括号。当您执行当前代码的print 时,您能准确地显示控制台的内容吗?现在你说的是optional values: [176, 177],我知道这不是完全它所说的。
  • 您是否期望 intArray 拥有一些数据模型,例如 {1: "One"}。您能否发布您对intArray 的预期数据样本
  • 我的错,是的,我把多余的括号留在里面了。把它们拿出来解决了这个问题。 jnpdx 将您的建议作为答案,我很乐意为此感谢您。其他所有人都感谢您的帮助。

标签: arrays swift userdefaults


【解决方案1】:

现在,您正在尝试解码以 Int 为键、Any 为值的字典数组(外括号是数组,内括号 :Dictionary)。

如果您将所有出现的[[Int:Array]] 替换为[Int],您的代码就可以工作。

【讨论】:

    【解决方案2】:

    您可以使用这样的方便扩展来简化对UserDefaults 的读取和写入。

    import Foundation
    
    extension UserDefaults {
        var favorites: [Int] {
            get { self.array(forKey: #function) as? [Int] ?? [] }
            set { self.set(newValue, forKey: #function) }
        }
    }
    

    如果您的应用中存储了旧数据并且您不想删除它,您可以简单地将上面的get / set 中的#function 替换为您的密钥"Favorites"

    这是您如何使用上述存储空间 -

    let defaults = UserDefaults.standard
    defaults.favorites = [1,2,3,4,5] // save
    
    let favorites = defaults.favorites // read
    print(favorites) // [1, 2, 3, 4, 5]
    

    【讨论】:

      【解决方案3】:

      将值存储到用户默认值

      UserDefaults.standard.set([1, 2, 3], forKey: "TestArrayUD")
      print(UserDefaults.standard.array(forKey: "TestArrayUD")) // Give Optional array eg: Optional([1, 2, 3])
          
      

      不带可选值的读取

      一种方法是使用UserDefaults.standard.array,如下例所示

          if let _intArray = UserDefaults.standard.array(forKey: "TestArrayUD") {
              print(_intArray) // Eg: [1, 2, 3]
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2017-12-16
        相关资源
        最近更新 更多