我正在尝试将保存到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")
的值更改为整数,以便我可以比较它们?
答案 0 :(得分:0)
首先,您可以使用UserDefaults.standar.integer(forKey:)
来检索Int
类型的值。其次,您应该存储一次铸造值,并且不应该多次检索它(目前您检索它3次而不是1次)。
而且,你的逻辑是有缺陷的。如果检索到的值为nil
,您将尝试比较该值。因此,您不仅要将Any?
与Int
进行比较,而是要将nil
与Int
进行比较。
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")
}
}
}