2017-12-02 218 views
1

我想创建一个Ints数组,我可以将它添加到UserDefaults,以便下次用户打开应用程序时,数组将被保存。所以,我知道如何创建一个UserDefaults阵列...附加到UserDefaults数组(Swift)

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

,我知道如何设置阵列到已经存在的数组:

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

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

回答

0

取而代之的是:

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

做到这一点:

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

这将初始化数组中,它并没有在缺省数据库中存在的情况下,空数组(或者,如果它以某种方式损坏,它不会解析为数组Int s)。

无论如何,避免使用as!这是非常好的做法,否则如果您的默认设置变坏,您将会在阅读时崩溃。

+0

这确实起初工作,但随后每当应用程序关闭并再次打开时,数组回到空... –

+0

@JacobCavin在将某些修改后的数组添加到用户默认值后,是否将修改后的数组写入? –

0

不确定你需要什么。

然而,这是你如何添加一个空数组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") 
0

我建议你为此创建一个计算的属性:只要您修改intArray将在UserDefaults更新它的值

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

现在,每当你叫intArray它返回你的价值来自UserDefaults。