我的应用涉及两个UILabels
labelDisplay
和labelStatus
,一个UIButton
,buttonAddOne
和一个变量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()
}
}
答案 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