0

我正在尝试将保存到 UserDefaults 的值与新整数进行比较,但我无法弄清楚。

func setScore() {
    let defaults = UserDefaults.standard
    let newScore = score
    if defaults.object(forKey: "HighScore") != nil {
        defaults.set(newScore, forKey: "HighScore")
        let highScore = defaults.object(forKey: "HighScore") as! Int
        print(highScore)
    } else if defaults.object(forKey: "HighScore") < Int(newScore) {
        defaults.set(newScore, forKey: "HighScore")
        let highScore = defaults.object(forKey: "HighScore") as! Int
        print(highScore)
    } else {

    }
}

如何将值从更改defaults.object(forKey: "HighScore")为整数,以便我可以比较它们?

4

1 回答 1

0

首先,您可以使用UserDefaults.standar.integer(forKey:)来检索类型的值Int。其次,您应该存储一次转换的值并且不应该多次检索它(目前您检索它 3 次而不是仅 1 次)。

此外,你的逻辑是有缺陷的。如果检索到的值是 ,则您正在尝试比较该值nil。因此,您不仅要与 比较,Any?还要与Int比较。nilInt

func setScore() {
    let defaults = UserDefaults.standard
    let newScore = score
    if let highScore = defaults.object(forKey: "HighScore") as? Int {
        print(highScore)
        if highScore < Int(newScore) {
            defaults.set(newScore, forKey: "HighScore")
        }
    }
}

Int相同的函数,但无需强制转换即可立即检索值(UserDefaults.integer(forKey:)如果没有为该键存储值,则返回 0)。

func setScore() {
    let newScore = score
    if UserDefaults.standard.integer(forKey: "HighScore") < Int(newScore) {
            defaults.set(newScore, forKey: "HighScore")
        }
    }
}
于 2017-08-30T14:41:42.130 回答