Swift - Saving highscore using NSUserDefaults
I'm using Swift to make a game. I want to save the users high score using NSUserDefaults. I know how to create a new NSUserDefaults variable in my AppDelegate file:
let highscore: NSUserDefaults = NSUserDefaults.standardUserDefaults()
But how do I set/get this in my view controllers?
Solution 1:
At first, NSUserDefaults is a dictionary (NSDictionary I think). Every app has its own user defaults, so you cannot access the user defaults from any other app.
If the user (the one who plays your game) makes a new highscore, you have to save that highscore like this:
let highscore = 1000
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setValue(highscore, forKey: "highscore")
userDefaults.synchronize() // don't forget this!!!!
Then, when you want to get the best highscore the user made, you have to "read" the highscore from the dictionary like this:
if let highscore = userDefaults.valueForKey("highscore") {
// do something here when a highscore exists
}
else {
// no highscore exists
}
Solution 2:
In Swift
let highScore = 1000
let userDefults = UserDefaults.standard //returns shared defaults object.
Saving:
userDefults.set(highScore, forKey: "highScore") //Sets the value of the specified default key to the specified integer value.
retrieving:
if let highScore = userDefults.value(forKey: "highScore") { //Returns the integer value associated with the specified key.
//do something here when a highscore exists
} else {
//no highscore exists
}
Solution 3:
Swift 4
Set Value
UserDefaults.standard.set("TEST", forKey: "Key")
//setString
Retrieve
UserDefaults.standard.string(forKey: "Key")
//getString
Remove
UserDefaults.standard.removeObject(forKey: "Key")