Swift - 使用NSUserDefaults保存高分

use*_*282 13 xcode nsuserdefaults uiviewcontroller ios swift

我正在使用Swift制作游戏.我想使用NSUserDefaults保存用户的高分.我知道如何在AppDelegate文件中创建一个新的NSUserDefaults变量:

let highscore: NSUserDefaults = NSUserDefaults.standardUserDefaults()
Run Code Online (Sandbox Code Playgroud)

但是如何在我的视图控制器中设置/获取它?

bee*_*eef 36

起初,NSUserDefaults是一本字典(我认为是NSDictionary).每个应用都有自己的用户默认值,因此您无法从任何其他应用访问用户默认值.

如果用户(玩游戏的人)创造了新的高分,那么你必须保存这样的高分:

let highscore = 1000
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setValue(highscore, forKey: "highscore")
userDefaults.synchronize() // don't forget this!!!!
Run Code Online (Sandbox Code Playgroud)

然后,当你想获得用户所做的最好的高分时,你必须从字典中"读取"高分,如下所示:

if let highscore = userDefaults.valueForKey("highscore") {
    // do something here when a highscore exists
}
else {
    // no highscore exists
}
Run Code Online (Sandbox Code Playgroud)

  • 根据[本文](http://www.codingexplorer.com/nsuserdefaults-a-swift-introduction/),您不应在iOS 8及更高版本中使用synchronize. (5认同)
  • 我认为if语句应该更像是:`if let highscore = userDefaults.valueForKey("highscore"){` (4认同)
  • 只有在用户实际上无法等待自动完成时才需要同步. (2认同)

Ash*_*k R 12

在Swift 3.0中

let highScore = 1000
let userDefults = UserDefaults.standard //returns shared defaults object.
Run Code Online (Sandbox Code Playgroud)

保存:

userDefults.set(highScore, forKey: "highScore") //Sets the value of the specified default key to the specified integer value.
Run Code Online (Sandbox Code Playgroud)

检索:

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
}
Run Code Online (Sandbox Code Playgroud)