在 SwiftUI 中更新分数标签

Updating the score label in SwiftUI

我的问题是我无法正确更新我的分数标签。当正确选择图像时,我试图添加 +1。但是它只会偶尔更新,我认为这取决于数组的随机性,但我不确定。我曾尝试更改值或事物的随机化方式,但它不会发挥作用或影响游戏所需的功能。我认为这是我盯着它看太久的事情之一。提前致谢!

@State private var targetArray = ["Target1", "Target2", "Target3", "Target4", "Target5", "Target6", "Target7", "Target8", "Target9", "Target10"]

@State private var MainTarget = Int.random(in: 0...5)
    @State private var numbers = Array(0...5).shuffled()
    @State private var score = 0

 func buttonAction() {

        // randomise the images
        targetArray.shuffle()

        numbers.shuffle()

        self.MainTarget = Int.random(in: 
 0...self.numbers.count - 1)

        // correct target selected
        if self.MainTarget == self.numbers[0] {
            self.score += 1 }
        if self.MainTarget == self.numbers[1] {
            self.score += 1 }
        if self.MainTarget == self.numbers[2] {
            self.score += 1 }
        if self.MainTarget == self.numbers[3] {
            self.score += 1 }
        if self.MainTarget == self.numbers[4] {
            self.score += 1 }
        if self.MainTarget == self.numbers[5] {
            self.score += 1

        } // wrong target selected. Add game over
        else { self.score -= 1
        }

    }

不确定我的问题是否正确。但它看起来像,因为您可以简单地用以下代码替换您的 if 语句(数组中的哪个元素等于 MainTarget 并不重要,因为您将 1 添加到 score 变量,而不管哪个数字与 MainTarget 匹配):

if numbers.contains(self.MainTarget) {
    score += 1
} else {
    score -= 1
}

您的代码存在的问题是,对于最后一个 if 语句为真的情况,您总是将 score-variable 减少 1 execpt。因此,如果您的第一个条件为真,则将分数加 1,但最后您会将分数减 1,因为最后一个 if 检查将失败...

编辑:甚至可能存在一些逻辑问题,因为数字将始终包含 MainTarget,因为 MainTarget 介于 0 和 5 之间,而数字包含从 0 到 5 的所有数字...

所以为了防止有人对未来感兴趣,我已经解决了这个问题,而不是每次按下按钮时随机化我的数组等,它现在将首先分别在每个按钮上检查获胜条件,然后随机化并更新分数标签。

  self.buttonAction()
                        if self.MainTarget == self.numbers[0] {
                            self.score += 1 } else { self.score -= 1 }
                        // randomise the index position and index chosen
                        if self.MainTarget == self.numbers[0] {
                            self.numbers.shuffle(); self.MainTarget = Int.random(in: 0...self.numbers.count - 1) }