使用 Single View Application 模板在 Xcode 中创建一个新的 iOS 项目。然后,将ViewController.swift的内容替换为如下代码:
import UIKit
class ViewController: UIViewController {
var generator = [6, 12, 8].generate()
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(type: .System)
button.setTitle("Button", forState: .Normal)
button.addTarget(self, action: "newScore", forControlEvents: .TouchUpInside)
button.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(button)
// Auto layout code using anchors (requires iOS9+)
let horizontalConstraint = button.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor)
let verticalConstraint = button.centerYAnchor.constraintEqualToAnchor(view.centerYAnchor)
NSLayoutConstraint.activateConstraints([horizontalConstraint, verticalConstraint])
// Print NSUserDefaults's highscore value when app is launched
print("highscore:", NSUserDefaults.standardUserDefaults().integerForKey("highscore"))
}
func newScore() {
guard let score = generator.next() else { return }
print("current score:", score)
//Check if score is higher than NSUserDefaults stored value and change NSUserDefaults stored value if it's true
if score > NSUserDefaults.standardUserDefaults().integerForKey("highscore") {
NSUserDefaults.standardUserDefaults().setInteger(score, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()
}
print("highscore:", NSUserDefaults.standardUserDefaults().integerForKey("highscore"))
}
}
在您的 iPhone 或模拟器上构建并运行该项目。 Xcode 控制台将打印 0,这是 NSUserDefaults.standardUserDefaults().integerForKey("highscore") 的当前值。
现在,点击按钮。这会将score 的值设置为6,因为6 > 0,NSUserDefaults.standardUserDefaults().integerForKey("highscore") 将获得这个新值。
再次单击按钮。这会将score 的值设置为12。您将立即在控制台中看到NSUserDefaults.standardUserDefaults().integerForKey("highscore") 获得了这个新值。
现在,如果您通过单击按钮将score 的值更改为8,您将看到NSUserDefaults.standardUserDefaults().integerForKey("highscore") 的值仍然为12,因为8 < 12。
如果你重建你的项目并重新启动它,你会看到NSUserDefaults.standardUserDefaults().integerForKey("highscore") 是持久的(它的值仍然是 12 并且没有被重置)。因此,NSUserDefaults 可以成为存储玩家最高分数的完美工具。
额外提示
NSUserDefaults.standardUserDefaults().integerForKey("highscore") 总是返回一个Int(如果你没有自己设置,它会返回0,而不是nil)。因此,您不需要/不能使用可选绑定。如果你真的想处理一个可选的返回值,你会更喜欢NSUserDefaults.standardUserDefaults().objectForKey("highscore") as? Int。