如何从 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
,你试图比较 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:)
returns 0 如果没有为该键存储值)。
func setScore() {
let newScore = score
if UserDefaults.standard.integer(forKey: "HighScore") < Int(newScore) {
defaults.set(newScore, forKey: "HighScore")
}
}
}
我正在尝试将保存到 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
,你试图比较 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:)
returns 0 如果没有为该键存储值)。
func setScore() {
let newScore = score
if UserDefaults.standard.integer(forKey: "HighScore") < Int(newScore) {
defaults.set(newScore, forKey: "HighScore")
}
}
}