我正在尝试制作一个测验应用,我想添加最高分,但是当我点击正确的答案按钮时,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)"
}
答案 0 :(得分:1)
原因是当您调用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)
}
答案 1 :(得分:0)
在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
并更新标签。如果UserDefaults
是最新的,则从coin
读取的行是多余的。代码使用模式匹配运算符~=
来检查范围,使用添加赋值运算符 +=
来增加值:
func addCoin() {
if 1...12 ~= soruSayisi {
coin += 10
UserDefaults.standard.set(coin, forKey: "coin")
coinLabel.text = "Matcoin = \(coin)"
} else { print("error") }
}
答案 2 :(得分:0)
为什么不将硬币作为计算属性,所以当你使用它时,它会自动获取最新值并更新标签?
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"))
}