Swift 4中的KVO侦听器问题

Swift 4中的KVO侦听器问题,swift,swift4,key-value-observing,nsobject,Swift,Swift4,Key Value Observing,Nsobject,我正在使用ViewModel类,如果loginResponse变量发生任何更改,我希望设置observer @objcMembers class ViewModel: NSObject { var count = 300 @objc dynamic var loginResponse :String override init() { loginResponse = "1" super.init() setupTimer

我正在使用
ViewModel
类,如果
loginResponse
变量发生任何更改,我希望设置observer

@objcMembers class ViewModel: NSObject {

    var count = 300
    @objc dynamic var loginResponse :String

    override init() {
        loginResponse = "1"
        super.init()
        setupTimer()
    }

    func setupTimer(){
        _ = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:#selector(callTimer), userInfo: nil, repeats: true)
    }

    func callTimer(){
        let minutes = String(count / 60)
        let seconds = String(count % 60)
        loginResponse = minutes + ":" + seconds
        count =  count - 1
    }
}
视图控制器代码:

override func viewDidLoad() {
    super.viewDidLoad()

    _ = viewModel.observe(\ViewModel.loginResponse) { (model, changes) in
        print(changes)
    }
}
我想在我的Viewcontroller中监听对
loginResponse
变量的任何更改,但它没有得到回调。我做错了什么?

函数返回一个
NSKeyValueObservation
对象,用于控制观察的生存期。当它被去离子或失效时,观察将停止

由于视图控制器没有保留对返回的“观察”的引用,因此它在
viewDidLoad
末尾超出范围,因此停止观察


要在视图控制器的生命周期内继续观察,请将返回的观察存储在属性中。如果在此之前已“完成”观察,则可以对观察调用
invalidate
,或将属性设置为
nil

你需要给观察者一个有力的参考<代码>.=是毫无意义的。