Der folgende Code sollte Ihnen helfen, Ihr Problem zu lösen:
import UIKit
class ViewController: UIViewController {
var food: [String] {
get {
if let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String] {
return returnValue
} else {
return ["muesli", "banana"] //Standardwert
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
override func viewDidLoad() {
super.viewDidLoad()
print(food) // gibt aus: ["muesli", "banana"] (beim ersten Start)
food = ["cake"]
print(food) // gibt aus: ["cake"]
food += ["spaghetti"]
print(food) // gibt aus: ["cake", "spaghetti"]
food = []
print(food) // gibt aus: []
NSUserDefaults.standardUserDefaults().setObject(nil, forKey: "food")
print(food) // gibt aus: ["muesli", "banana"]
}
}
Jedoch, mit dem vorherigen Code, wenn Sie food = []
setzen, haben Sie ein Problem, da food
nicht ["muesli", "banana"]
zurückgeben wird. Um dies zu vermeiden, sollten Sie vielleicht den folgenden Code bevorzugen:
import UIKit
class ViewController: UIViewController {
var food: [String] {
get {
if let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String] {
return returnValue == [] ? ["muesli", "banana"] : returnValue
} else {
return ["muesli", "banana"] //Standardwert
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
override func viewDidLoad() {
super.viewDidLoad()
print(food) // gibt aus: ["muesli", "banana"] (beim ersten Start)
food = ["cake"]
print(food) // gibt aus: ["cake"]
food += ["spaghetti"]
print(food) // gibt aus: ["cake", "spaghetti"]
food = []
print(food) // gibt aus: ["muesli", "banana"]
NSUserDefaults.standardUserDefaults().setObject(nil, forKey: "food")
print(food) // gibt aus: ["muesli", "banana"]
}
}