使用 UserDefaults 快速保存高分

Posted

技术标签:

【中文标题】使用 UserDefaults 快速保存高分【英文标题】:Using UserDefaults to save a high score in swift 【发布时间】:2017-06-20 20:33:29 【问题描述】:

每次玩家退出应用程序时,我都会尝试获得高分以保存,但我很难让它发挥作用,而且我很困惑我在哪里犯了错误。

var gameSettings = Settings.sharedInstance
let HIGHSCORE = "HIGHSCORE"

if gameSettings.highScore < score
        gameSettings.highScore = score

        UserDefaults.standard.set(gameSettings.highScore, forKey: HIGHSCORE)
    

        if gameSettings.highScore >= score
            gameSettings.score = score

    

    let gameOverHighScore = SKLabelNode()
    gameOverHighScore.name = "gameOverHighScore"
    gameOverHighScore.fontName = "Helvetica Neue UltraLight"
    if let HIGHSCORE = UserDefaults.standard.value(forKey: HIGHSCORE) 
        gameOverHighScore.text = "HIGHSCORE : \(HIGHSCORE)M"
    
    gameOverHighScore.fontColor = SKColor.white
    gameOverHighScore.position = CGPoint(x: 0, y: -175)
    gameOverHighScore.fontSize = 70
    gameOverHighScore.zPosition = 52
    addChild(gameOverHighScore)

【问题讨论】:

【参考方案1】:

if let HIGHSCORE = UserDefaults.standard.value(forKey: HIGHSCORE) gameOverHighScore.text = "HIGHSCORE : \(HIGHSCORE)M"

您尝试在 UserDefaults 中查找值不是通过键 HIGHSCORE,而是通过 ANY 类型的新值 HIGHSCORE。如果你想修复它,你可以这样做:

if let HIGHSCORE = UserDefaults.standard.value(forKey: self. self.HIGHSCORE) as! Int gameOverHighScore.text = "HIGHSCORE : \(HIGHSCORE)M"

或者你可以用另一个名字解开新值中的值。并且不要忘记将值转换为适当的类型或使用

UserDefaults.standard.integer(forKey: self.HIGHSCORE)

【讨论】:

【参考方案2】:

下面是一个简单的例子:

let firebaseId = user.uid // Variable we want to save
UserDefaults.standard.set(firebase, forKey: "firebase") // Saving the variable with key "firebase"

现在要检索:

if let firebaseId = UserDefaults.standard.string(forKey: "firebase") 
    print("Firebase ID: \(firebase)")

在您的代码中,您正在检索到 HIGHSCORE,并且您应该检索到类似 gameSettings.highScore 的内容(根据我从您的代码中可以推断出的内容)

【讨论】:

以上是关于使用 UserDefaults 快速保存高分的主要内容,如果未能解决你的问题,请参考以下文章

应用UserDefaults储存游戏分数和最高分

从两个单独的 SKScene 中检索并立即更新高分

如何快速保存高分

使用 UserDefaults 保存数组

UserDefaults - 使用 Xcode Simulator 时保存不一致

SwiftUI:如何使用 UserDefaults 保存选择器数据?