我无法理解为什么这个if语句在Swift中不起作用

时间:2014-12-29 17:37:06

标签: ios swift

我的应用涉及两个UILabels labelDisplaylabelStatus,一个UIButtonbuttonAddOne和一个变量numbers。我无法理解为什么在labelStatus达到5时numbers没有更新。

import UIKit

var numbers:Int = 0

class ViewController: UIViewController {

    // Declaration of the two labels
    @IBOutlet weak var labelDisplay: UILabel!
    @IBOutlet weak var labelStatus: UILabel!

    // Code for the "Add 1" button
    @IBAction func buttonAddOne(sender: AnyObject) {
        numbers = numbers + 1
        labelDisplay.text = "\(numbers)"
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        if numbers == 5 {
            labelStatus.text = "Numbers variable is equal to 5! Hurray!"
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

2 个答案:

答案 0 :(得分:1)

  

当“数字”达到5

时,我无法理解为什么labelStatus没有被更新

会更新什么? viewDidLoad内的代码?但是,viewDidLoad在视图控制器获取其视图时会提前调用一次;永远不会再调用它,因此代码永远不会再运行。

如果您想更新labelStatus,为什么不在增加numbers的相同代码中执行此操作?

@IBAction func buttonAddOne(sender: AnyObject) {
    numbers = numbers + 1
    labelDisplay.text = "\(numbers)"
    if numbers == 5 {
        labelStatus.text = "Numbers variable is equal to 5! Hurray!"
    }
}

答案 1 :(得分:1)

在加载视图时,您在viewDidLoad中输入的代码执行一次 - 每次更新numbers时都不会触发。

要实现您的需求,您应该使number成为实例属性,并添加didSet观察者:

class ViewController: UIViewController {
    var numbers: Int = 0 {
        didSet {
            if numbers == 5 {
                labelStatus.text = "Numbers variable is equal to 5! Hurray!"
            }
        }
    }
    ...
}

当属性值改变时,属性观察者会自动执行。

有关详细信息,请参阅Property Observers