Ios 无法在KVO中调用观察者

Ios 无法在KVO中调用观察者,ios,swift,key-value-observing,Ios,Swift,Key Value Observing,当我点击文本字段时,我会打开一个带有姓名列表的表格视图。我使用segue导航到此tableview。一旦从tableview中选择了一个元素,我就在我的viewcontroller中获取它,并使用回调函数获取textfield 这是prepareForSegue函数 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "seguedropdown2&q

当我点击文本字段时,我会打开一个带有姓名列表的
表格视图。我使用segue导航到此tableview。一旦从tableview中选择了一个元素,我就在我的viewcontroller中获取它,并使用回调函数获取textfield

这是prepareForSegue函数

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
   if segue.identifier == "seguedropdown2" {
         
        vc.datacallback = { (message) in
        
        if(message[2] as! Int == 8) {
           self.Smat_Receiver1 = "\(message[0])"
           self.receiver.receiverName1 = self.Smat_Receiver1 // Observer added here. But it's not called
        }
        
        if(message[2] as! Int == 9) {
           self.Smat_Receiver2 = "\(message[0])"
           self.receiver.receiverName2 = self.Smat_Receiver2 //Observer added here. But it's not called
        }

      }
    }
  }
这就是我设置观察者的方式

var ob:NSKeyValueObservation!
let receiver = Receiver()

override func viewDidLoad() {
  super.viewDidLoad()

    ob = receiver.observe(\Receiver.receiverName1, options: .new) { person, change in
        print("Receiver 1 is now \(person.receiverName1)")
    }
    ob = receiver.observe(\Receiver.receiverName2, options: .new) { person, change in
        print("Receiver 2 is now \(person.receiverName2)")
    }

}
在其他地方,我设置了接收器,就像这样

@objc class Receiver: NSObject {
    @objc dynamic var receiverName1 = String()
    @objc dynamic var receiverName2 = String()
}

我的问题是,只要我设置了一个新值,就不会调用观察者。

代码中的问题是将两个观察实例保存到一个变量中,但每个实例都应该单独存储,这会导致第一个实例失效

var ob1:NSKeyValueObservation!
var ob2:NSKeyValueObservation!
...
ob1=接收者。观察(\.receiverName1,选项:。新建){个人,更改
...
}
ob2=接收者。观察(\.receiverName2,选项:。新建){个人,更改
...
}

为什么需要KVO,那么
willSet/didSet
呢?是的……我最后使用了
willSet/didSet
。但我想知道为什么KVO在这种情况下不工作。。。