将数组数组保存为用户默认值

时间:2018-01-06 21:07:38

标签: ios swift userdefaults

我可以使用以下方法将单个数组保存到用户默认值:

var array = [0,0,0]

defaults.set(array, forKey: "SavedArray") //saves array

array = defaults.object(forKey: "SavedArray") as? [Int] ?? [Int]()

但它不会让我保存一组数组,我试试这个:

arrayOfArrays = [[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

defaults.set(arrayOfArrays, forKey: "SavedArrayOfArrays") //saves array

arrayOfArrays = [defaults.object(forKey: "SavedArrayOfArrays") as? Array<Int> ?? Array<Int>()] //loads array

导致在数组中加载一个空数组&#34; [[]]&#34;并且不保存数组中的数组列表。

3 个答案:

答案 0 :(得分:4)

首先,存在一个关键的不匹配。您为密钥SavedArrayOfArrays保存了数组,但为arrayOfArrays

加载了该​​数组

其次,嵌套数组的类型为[[Int]]Array<Array<Int>>,而不是[Int]Array<Int>

最后,UserDefaults有一个加载数组的专用方法

let arrayOfArrays = defaults.array(forKey: "SavedArrayOfArrays") as? [[Int]]

答案 1 :(得分:1)

试试这个

 arrayOfArrays = defaults.array(forKey: "arrayOfArrays") as? [[Int]] 

或者你可以这样做

arrayOfArrays = defaults.array(forKey: "arrayOfArrays") as? [Array<Int>] 

答案 2 :(得分:0)

全部谢谢!

我试着用[[Int]]保存它,就像你们所建议的一样,然后xcode让我把它切换到[[Int]])!它有效!

arrayOfArrays = [[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

defaults.set(arrayOfArrays, forKey: "SavedArrayOfArrays") //saves array

arrayOfArrays = (defaults.array(forKey: "SavedArrayOfArrays") as? [[Int]])! //loads array