This is an array:
var myArray = [1]
It contains Int
values.
This is how I save an array in NSUserDefaults
. This code seems to be working fine:
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "myArray")
This is how I load an array:
myArray = NSUserDefaults.standardUserDefaults().objectForKey("myArray")
The code above, though, retrieves an error. Why?
You want to assign an AnyObject?
to an array of Int
s, beacuse
objectForKey
returns AnyObject?
, so you should cast it to array this way:
myArray = NSUserDefaults.standardUserDefaults().objectForKey("myArray") as [Int]
If there are no values saved before, it could return nil, so you could check for it with:
if let temp = NSUserDefaults.standardUserDefaults().objectForKey("myArray") as? [Int] {
myArray = temp
}
You should use if let
to unwrap your optional value and also a conditional cast. By the way you should also use arrayForKey
as follow:
if let myLoadedArray = UserDefaults.standard.array(forKey: "myArray") as? [Int] {
print(myLoadedArray)
}
Or use the nil coalescing operator ??
:
let myLoadedArray = UserDefaults.standard.array(forKey: "myArray") as? [Int] ?? []
Swift 4:
myArray : [Int] = UserDefaults.standard.object(forKey: "myArray") as! [Int]