我无法使用 NSUserDefaults 添加分数
I can't add the score with NSUserDefaults
我正在尝试制作一个测验应用程序,我想添加最高分,但是当我点击正确答案按钮时,coinLabel 有 Matcoin = 10
文本。然后我再次点击正确答案按钮,它应该有文本 Matcoin = 20
但它有 Matcoin = 10
代替。它没有增加分数。
这是我的代码:
var coin = 0
func addCoin() {
if soruSayisi >= 1 && soruSayisi <= 12 {
//if the number of questions is between 1 and 12
coin = coin + 10
else {
print("error")
}
UserDefaults.standard.set(coin, forKey: "coin")
UserDefaults.standard.synchronize()
coinLabel.text = NSString(format: "Matcoin = %i", coin) as String
}
@IBAction func AbuttonClicked(_ sender: Any) {
if "A" == cvpLbl {
addCoin()
//correct answer
}
override func viewWillAppear(_ animated: Bool) {
let coinString = String(UserDefaults.standard.integer(forKey: "coin"))
coinLabel.text = "Matcoin = \(coinString)"
}
原因是当您调用 addCoin() 时没有从 userDefaults 中读取硬币值
func addCoin() {
coin = UserDefaults.standard.integer(forKey: "coin")
if soruSayisi >= 1 && soruSayisi <= 12 {
coin = coin + 10
else {
print("error")
return
}
UserDefaults.standard.set(coin, forKey: "coin")
coinLabel.text = String(coin)
}
在 viewWillAppear
中读取 UserDefaults
的值,将其分配给 coin
和标签。 别忘了打电话给super
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
coin = UserDefaults.standard.integer(forKey: "coin")
coinLabel.text = "Matcoin = \(coin)"
}
在addCoin()
中首先检查soruSayisi
是否在1..12
范围内。如果是,将硬币增加 10,将其写入 UserDefaults
并更新标签。如果 coin
是最新的,则从 UserDefaults
读取的行是多余的。该代码使用模式匹配运算符 ~=
来检查范围,并使用 加法赋值运算符 +=
来增加值:
func addCoin() {
if 1...12 ~= soruSayisi {
coin += 10
UserDefaults.standard.set(coin, forKey: "coin")
coinLabel.text = "Matcoin = \(coin)"
} else { print("error") }
}
为什么不让硬币成为一个计算的属性,这样当你使用它时,它会自动获取最新值并更新标签?
var coin = 0 {
didSet {
coinLabel.text = "Matcoin = \(coin)"
}
}
func addCoin() {
if soruSayisi >= 1 && soruSayisi <= 12 {
//if the number of questions is between 1 and 12
coin += 10
}
UserDefaults.standard.set(coin, forKey: "coin")
}
@IBAction func aButtonClicked(_ sender: UIButton) {
if "A" == cvpLbl {
addCoin()
//correct answer
}
}
override func viewWillAppear(_ animated: Bool) {
coin = UserDefaults.standard.integer(forKey: "coin"))
}
我正在尝试制作一个测验应用程序,我想添加最高分,但是当我点击正确答案按钮时,coinLabel 有 Matcoin = 10
文本。然后我再次点击正确答案按钮,它应该有文本 Matcoin = 20
但它有 Matcoin = 10
代替。它没有增加分数。
这是我的代码:
var coin = 0
func addCoin() {
if soruSayisi >= 1 && soruSayisi <= 12 {
//if the number of questions is between 1 and 12
coin = coin + 10
else {
print("error")
}
UserDefaults.standard.set(coin, forKey: "coin")
UserDefaults.standard.synchronize()
coinLabel.text = NSString(format: "Matcoin = %i", coin) as String
}
@IBAction func AbuttonClicked(_ sender: Any) {
if "A" == cvpLbl {
addCoin()
//correct answer
}
override func viewWillAppear(_ animated: Bool) {
let coinString = String(UserDefaults.standard.integer(forKey: "coin"))
coinLabel.text = "Matcoin = \(coinString)"
}
原因是当您调用 addCoin() 时没有从 userDefaults 中读取硬币值
func addCoin() {
coin = UserDefaults.standard.integer(forKey: "coin")
if soruSayisi >= 1 && soruSayisi <= 12 {
coin = coin + 10
else {
print("error")
return
}
UserDefaults.standard.set(coin, forKey: "coin")
coinLabel.text = String(coin)
}
在
viewWillAppear
中读取UserDefaults
的值,将其分配给coin
和标签。 别忘了打电话给super
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) coin = UserDefaults.standard.integer(forKey: "coin") coinLabel.text = "Matcoin = \(coin)" }
在
addCoin()
中首先检查soruSayisi
是否在1..12
范围内。如果是,将硬币增加 10,将其写入UserDefaults
并更新标签。如果coin
是最新的,则从UserDefaults
读取的行是多余的。该代码使用模式匹配运算符~=
来检查范围,并使用 加法赋值运算符+=
来增加值:func addCoin() { if 1...12 ~= soruSayisi { coin += 10 UserDefaults.standard.set(coin, forKey: "coin") coinLabel.text = "Matcoin = \(coin)" } else { print("error") } }
为什么不让硬币成为一个计算的属性,这样当你使用它时,它会自动获取最新值并更新标签?
var coin = 0 {
didSet {
coinLabel.text = "Matcoin = \(coin)"
}
}
func addCoin() {
if soruSayisi >= 1 && soruSayisi <= 12 {
//if the number of questions is between 1 and 12
coin += 10
}
UserDefaults.standard.set(coin, forKey: "coin")
}
@IBAction func aButtonClicked(_ sender: UIButton) {
if "A" == cvpLbl {
addCoin()
//correct answer
}
}
override func viewWillAppear(_ animated: Bool) {
coin = UserDefaults.standard.integer(forKey: "coin"))
}