如何从UserDefaults更改值的类型?

时间:2017-08-30 14:35:20

标签: swift 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")的值更改为整数,以便我可以比较它们?

1 个答案:

答案 0 :(得分: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")
        }
    }
}