1

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

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

它会导致在数组“[[]]”中加载一个空数组,并且不会将数组列表保存在数组中。

4

3 回答 3

4

首先,密钥不匹配。您将数组保存为键SavedArrayOfArrays,但将其加载为arrayOfArrays

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

最后,UserDefaults得到了一个专门的方法来加载数组

let arrayOfArrays = defaults.array(forKey: "SavedArrayOfArrays") as? [[Int]]
于 2018-01-06T21:21:31.330 回答
1

试试这个

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

或者你可以这样做

arrayOfArrays = defaults.array(forKey: "arrayOfArrays") as? [Array<Int>] 
于 2018-01-06T21:10:05.703 回答
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
于 2018-01-06T22:01:53.407 回答