如何使用swift侦听变量值的变化



我有一个字符串类型的变量,它的值是通过PickerView更新的,当这个值被更新时,它就会更新按钮的标题,像这样:

@IBOutlet weak var selectedCountry: UIButton!
 var pickedCountry: String?
func checkForPickedCountry() {
        if self.pickedCountry != nil {
            selectedCountry.setTitle("(pickedCountry!)", forState: .Normal);
        } else {
            selectedCountry.setTitle("Tap here pick a country", forState: .Normal);
        }

现在就像我提到的,我使用pickerView来更新pickedCountry的值,当从pickerView中选择一个国家时,它会显示第二个标题为selectedFlag的按钮,该按钮会拍摄另一个pickerView来选择国家标志。现在我想听第一个pickedCountry变量变化的原因是,这样我就可以将selectedFlag按钮的标题更改为默认值。

这是最后的代码:

@IBOutlet weak var selectedCountry: UIButton!
@IBOutlet weak var selectedFlag: UIButton!
 var pickedCountry: String?
 var pickedFlag: String?
func checkForPickedCountry() {
        if self.pickedCountry != nil {
            selectedCountry.setTitle("(pickedCountry!)", forState: .Normal);
            selectedFlag.hidden = false
        } else {
            selectedCountry.setTitle("Tap here pick a country", forState: .Normal);
            selectedFlag.hidden = true
        }

       if self.pickedFlag != nil {
           selectedFlag.setTitle("(pickedCountry!)", forState: .Normal);
       } else {
           selectedFlag.setTitle("Tap here to pick a flag", forState: .Normal)
       }

现在我如何将selectedFlag的标题设置为"当' PickedCountry '的值改变时,点击这里选择标志??

您可以使用键值观察者来监视它。

在应该查找更改的类中,执行以下操作:

添加观察者

func addObservers() {
    let observerKeyLocation = "pickedConuntry"
    classThatMonitors.addObserver(self, forKeyPath: observerKeyLocation, options: .New, context: nil)
}

然后,重写observerValueForKeyPath函数:

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    if keyPath == observerKeyLocation {
        if self.pickedCountry != nil {
            selectedCountry.setTitle("(pickedCountry!)", forState: .Normal);
        } else {
            selectedCountry.setTitle("Tap here pick a country", forState: .Normal);
        }
    }
}

现在,当这个值被改变时,你的观察者会立即被更新,并且可以调用你放在它里面的代码。

请记住,如果您定义了被观察的类,您还必须删除该观察器以避免崩溃。

你可以在你的变量中实现willSet,每次变量改变时调用你的函数。你也可以修改你的函数来获得新的值,像这样:

var pickedCountry: String? {
    willSet(newValue) {
      guard let oldValue = str, new = newValue else { return }
      if oldValue != new { //....Your value is changed }
    }
}
func checkForPickedCountry(updatedValue: String) {...}

您可以使用简单的逻辑如下::

设置一个Int变量var flag : Int = 0现在在整个程序标志为0值

再次当你点击按钮改变它的值为1由自己。Flag = 1。同样,当你点击第二个时,让它自己为0。Flag = 0.

通过获取该标志变量的值,您将侦听该事件。

您可以通过提供值2,3,4…标记变量

相关内容

  • 没有找到相关文章

最新更新