我正在构建一个快速的游戏并且需要设置一个高分,我一直试图弄清楚如何做一段时间。那么请你告诉我如何搜索这个库,看看是否已经保存了高分,然后将其与用户的分数进行比较。我试过这个,但它不会工作。请帮助并尽可能清楚。给我示例代码将非常感激。
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()
}
答案 0 :(得分:17)
使用单一视图应用程序模板在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
,因为{{ 1}}。
如果您重建项目并重新启动它,您将看到8 < 12
是持久的(其值仍然是12并且尚未重置)。因此,NSUserDefaults.standardUserDefaults().integerForKey("highscore")
可以成为存储玩家最高分的完美工具。
NSUserDefaults
始终返回NSUserDefaults.standardUserDefaults().integerForKey("highscore")
(如果您未自行设置,则会返回Int
,而不是0
)。因此,您不需要/不能使用可选绑定。如果您真的想要处理可选的值返回,您会更喜欢nil
。
答案 1 :(得分:1)
var defaults=NSUserDefaults()
var highscore=defaults.integerForKey("highscore")
if(Score>highscore)
{
defaults.setInteger(Score, forKey: "highscore")
}
var highscoreshow=defaults.integerForKey("highscore")
lblHighScore.text="\(highscoreshow)"
println("hhScore reported: \(lblHighScore.text)")
lblPlayScore.text="\(Score)"
println("play reported: \(lblPlayScore.text)")