我正在构建一个快速游戏并且需要设置高分,我一直在努力弄清楚如何去做。所以请你告诉我如何搜索这个库,看看是否有已经保存的高分,然后将它与用户的分数进行比较。我试过解决这个问题,但行不通。请帮助并尽可能清楚。给我示例代码将不胜感激。
if let highscore: AnyObject = NSUserDefaults.valueForKey("highscore") {
var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("highScore") as Int
if ( savedScore < Score) {
var highscore = Score
NSUserDefaults.standardUserDefaults().setObject(highscore, forKey:"highscore")
NSUserDefaults.standardUserDefaults().synchronize() }
}
else {
var highscore = Score
NSUserDefaults.standardUserDefaults().setObject(highscore, forKey:"highscore")
NSUserDefaults.standardUserDefaults().synchronize()
}
最佳答案
使用 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
的值(value)因为8 < 12
.
如果您重建项目并重新启动它,您将看到 NSUserDefaults.standardUserDefaults().integerForKey("highscore")
是持久的(它的值仍然是 12 并且没有被重置)。因此,NSUserDefaults
可以成为存储玩家最高分的完美工具。
额外提示
NSUserDefaults.standardUserDefaults().integerForKey("highscore")
总是返回 Int
(如果你没有自己设置,它会返回 0
,而不是 nil
)。因此,您不需要/不能使用可选绑定(bind)。如果你真的想处理可选值返回,你会更喜欢 NSUserDefaults.standardUserDefaults().objectForKey("highscore") as? Int
.
关于xcode - 使用 NSuserdefaults 在 Swift 和 Sprite Kit 中设置 HighScore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25587299/