如何从 UserDefaults 更改值的类型?

How to change the type of a value from UserDefaults?

我正在尝试将保存到 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") 中的值更改为整数以便进行比较?

首先,您可以使用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:) returns 0 如果没有为该键存储值)。

func setScore() {
    let newScore = score
    if UserDefaults.standard.integer(forKey: "HighScore") < Int(newScore) {
            defaults.set(newScore, forKey: "HighScore")
        }
    }
}