这是一个数组:
var myArray = [1]
它包含Int
个值。
这就是我在NSUserDefaults
中保存数组的方法。这段代码似乎运行正常:
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "myArray")
这就是我加载数组的方式:
myArray = NSUserDefaults.standardUserDefaults().objectForKey("myArray")
但上面的代码检索错误。为什么呢?
答案 0 :(得分:5)
您希望将AnyObject?
分配给Int
的数组,因为
objectForKey
返回AnyObject?
,因此您应该以这种方式将其转换为数组:
myArray = NSUserDefaults.standardUserDefaults().objectForKey("myArray") as [Int]
如果之前没有保存任何值,则可以返回nil,因此您可以使用以下命令检查它:
if let temp = NSUserDefaults.standardUserDefaults().objectForKey("myArray") as? [Int] {
myArray = temp
}
答案 1 :(得分:3)
您应该使用if let
来解包您的可选值以及条件转换。顺便说一句,您还应该使用arrayForKey
,如下所示:
if let myLoadedArray = UserDefaults.standard.array(forKey: "myArray") as? [Int] {
print(myLoadedArray)
}
或使用nil合并运算符??
:
let myLoadedArray = UserDefaults.standard.array(forKey: "myArray") as? [Int] ?? []
答案 2 :(得分:0)
Swift 4:
myArray : [Int] = UserDefaults.standard.object(forKey: "myArray") as! [Int]