我需要创建一个数组来添加具有这种格式的对象,就像 Swift 中的字典一样:["key1": "value1", "key2": "value2"]
当我尝试使用 NSUserDefaults
保存它时,一切都是正确的,但是当使用 key 读取 NSUserDefaults
时,它会崩溃。我的 var obj 需要什么类型的数据?
let def = NSUserDefaults.standardUserDefaults()
var key = "keySave"
var element: AnyObject!
var array1: [AnyObject!] = []
array1.append(["key1": "val1", "key2": "val2"])
array1.append(["key1": "val1", "key2": "val2"])
//save
var savestring : [AnyObject!]
savestring = array1
var defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(savestring, forKey: key)
defaults.synchronize()
//read
var obj: [AnyObject!] = []
if(obj != nil){
print("size: ")
print(obj.count) //vary long value confused..
element = obj[0] //crash
print(element.objectForKey("key1"))
}
最佳答案
问题是“array of array”,但我认为大多数人来到这里只是想知道如何将数组保存到 UserDefaults
。对于这些人,我将添加一些常见示例。
字符串数组
保存数组
let array = ["horse", "cow", "camel", "sheep", "goat"]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedStringArray")
检索数组
let defaults = UserDefaults.standard
let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()
整型数组
保存数组
let array = [15, 33, 36, 723, 77, 4]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedIntArray")
检索数组
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedIntArray") as? [Int] ?? [Int]()
bool 数组
保存数组
let array = [true, true, false, true, false]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedBoolArray")
检索数组
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedBoolArray") as? [Bool] ?? [Bool]()
日期数组
保存数组
let array = [Date(), Date(), Date(), Date()]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedDateArray")
检索数组
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedDateArray") as? [Date] ?? [Date]()
对象数组
自定义对象(以及对象数组)需要更多的工作才能保存到 UserDefaults
。请参阅以下链接了解如何操作。
- Save custom objects into NSUserDefaults
- Docs for saving color to UserDefaults
- Attempt to set a non-property-list object as an NSUserDefaults
注意事项
- nil 合并运算符 (
??
) 允许您在不崩溃的情况下返回保存的数组或空数组。这意味着如果对象返回 nil,则将使用??
运算符后面的值。 - 如您所见,
Int
、Bool
和Date
的基本设置相同。我还使用Double
对其进行了测试。据我所知,您可以保存在属性列表中的任何内容都可以像这样工作。
关于swift - 如何在 NSUserdefaults 中快速保存和读取数组数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25179668/