将多维数组保存为Swift中的userdefaults

use*_*986 1 arrays swift

我有一个数组,我似乎无法保存为Swift的用户默认值.

var shoppingLists = [
    (name: "Giant", items: ["Salad", "Bread"]),
    (name: "ShopRite", items: ["Chips", "Dip"])
]
NSUserDefaults.standardUserDefaults().setObject(shoppingLists, forKey: "GroceryList");
NSUserDefaults.standardUserDefaults().synchronize()
Run Code Online (Sandbox Code Playgroud)

任何想法我可能做错了什么?如果我有一个简单的数组,如var list = [1,2,3,4],我可以保存它.但我似乎无法保存它目前的结构.

Rob*_*ier 7

这不是一个多维数组.这是一组元组.元组不符合NSCoding,所以你不能将它们放入NSUserDefaults.

您应该使用实现的简单类替换元组NSCoding.然后你可以NSKeyedArchiver用来序列化它NSUserDefaults.有关详细信息,请参阅存档和序列化编程指南.

或者,您可以将其编码为字典数组:

var shoppingLists = [
    ["name": "Giant", "items": ["Salad", "Bread"]],
    ["name": "ShopRite", "items": ["Chips", "Dip"]]
]
Run Code Online (Sandbox Code Playgroud)

这对于存储来说并不错,但我不会以这种方式处理数据.创建实际的模型类型而不是依赖于元组或字典几乎总是更好.

(旁注:几乎没有理由打电话synchronize().它只是暂停你的程序.它实际上并没有导致任何东西被写入.)