无法在Swift中增加变量 - 不会抛出任何错误

时间:2015-06-07 19:02:48

标签: swift increment

(我对编程非常陌生,所以非常感谢外行友好的答案)

我正在与两支队伍进行比赛。我有一个按钮,可以检查哪个团队正在运行,然后更新该团队的分数。代码运行时没有错误,但按下按钮时分数不会更新。

在我的模型文件中,我声明了

var teamOneScore = 0
var teamTwoScore = 0
var teamCounter = 2

在视图控制器中我有

    @IBAction func buttonPressed(sender: AnyObject) {
    if timer.valid && teamCounter % 2 == 0 {
        ++teamOneScore
    } else if timer.valid && teamCounter % 2 != 0 {
        ++teamTwoScore
    }
}

在viewDidLoad

        if teamCounter % 2 == 0 {
        scoreLabel.text = "Score: \(teamOneScore)"
    } else {
        scoreLabel.text = "Score: \(teamTwoScore)"
    }

当视图加载时,scoreLabel会正确显示0,但是当我按下按钮时,显示的分数不会上升。计时器和teamCounter检查在代码中的其他任何地方工作正常,我有另一个按钮,增加teamCounter(它也作为模型中的int存储)没有问题。所以buttonPressed的所有单独组件似乎工作正常,我没有任何错误继续下去。我很难过。

2 个答案:

答案 0 :(得分:1)

scoreLabel中创建viewDidLoad时,您可以为其指定"Score: \(teamOneScore)"的文本值,这很棒。但是,当您增加teamOneScore变量时,实际的UILabel无法更改其text。它假设您要显示Score: 0。即使变量的值已更改,该标签也已创建,并将继续显示已初始化的文本。

您需要在buttonPressed功能中添加

scoreLabel.text = "Score: \(teamOneScore)"scoreLabel.text = "Score: \(teamOneScore)"如果是得分的第2队。

增加分数后。这是允许标签文本实际更改的原因。

答案 1 :(得分:1)

您必须使用额外方法移动文本设置。现在文本只在viewDidLoad中设置 - 但是该函数不会被多次触发。

将viewDidLoad更改为

updateUI()

添加新功能

func updateUI() {
    if teamCounter % 2 == 0 {
        scoreLabel.text = "Score: \(teamOneScore)"
    } else {
        scoreLabel.text = "Score: \(teamTwoScore)"
    }
}

并将该方法称为按钮操作中的最后一项:

@IBAction func buttonPressed(sender: AnyObject) {
    if timer.valid && teamCounter % 2 == 0 {
        ++teamOneScore
    } else if timer.valid && teamCounter % 2 != 0 {
        ++teamTwoScore
    } 
    updateUI()
}