【问题标题】:Appending to UserDefaults Array (Swift)附加到 UserDefaults 数组 (Swift)
【发布时间】:2018-05-16 17:05:51
【问题描述】:

我想创建一个 Ints 数组,我可以附加到该数组并将其保存到 UserDefaults,以便下次用户打开应用程序时,该数组将被保存。所以,我知道如何创建一个UserDefaults 数组...

var intArray = UserDefaults.standard.array(forKey: "intArray") as! [Int]

而且我知道如何将数组设置为已经存在的数组:

var array = [2, 6, 34, 4, 9]
UserDefaults.standard.set(array, forKey: "intsArray")

但是,我需要数组为空,然后用户将 Ints 添加到数组中。感谢您的帮助!

【问题讨论】:

    标签: arrays swift int nsuserdefaults


    【解决方案1】:

    我建议您为此创建一个计算属性:

    var intArray: [Int] {
        get {
            return UserDefaults.standard.array(forKey: "intArray") as? [Int] ?? []
        }
        set {
            UserDefaults.standard.set(newValue, forKey: "intArray")
        }
    }
    

    现在,每当您修改 intArray 时,它都会更新其在 UserDefaults 中的值,并且每当您调用 intArray 时,它都会返回来自 UserDefaults 的值。

    【讨论】:

      【解决方案2】:

      不确定您需要什么。

      但是,这是您将空数组添加到 UserDefaults 的方式

       UserDefaults.standard.set([Int](), forKey: "nums")
      

      这就是你的方式

      1. 从 UserDefaults 加载数组
      2. 添加值
      3. 再次将其保存到 UserDefaults

      var nums = UserDefaults.standard.array(forKey: "nums") as! [Int]
      nums.append(1)
      UserDefaults.standard.set(nums, forKey: "nums")
      

      【讨论】:

        【解决方案3】:

        而不是这个:

        var intArray = UserDefaults.standard.array(forKey: "intArray") as! [Int]
        

        这样做:

        var intArray = UserDefaults.standard.array(forKey: "intArray") as? [Int] ?? []
        

        这会将数组初始化为一个空数组,以防它在默认数据库中尚不存在(或者如果它以某种方式损坏而无法解析为Ints 的数组)。

        无论如何,避免在此处使用as! 是一种很好的做法,否则如果您的默认设置损坏,您将在读取时崩溃。

        【讨论】:

        • 一开始确实有效,但是每当应用程序关闭并再次打开时,数组就会变回空...
        • @JacobCavin 添加内容后,您是否将修改后的数组写回用户默认值?
        • @CharlesSrstka 我也有同样的问题
        • @JacobCavin 我也有同样的问题
        猜你喜欢
        • 1970-01-01
        • 2019-09-15
        • 2018-06-16
        • 1970-01-01
        • 2017-12-24
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多