0

我正在学习 MVVM,所以我在属性上添加了观察者

 init(model: RegisterUserModel = RegisterUserModel()) {
    self.registerModel = model

    let confirmPasswordObserver = self.registerModel.observe(\RegisterUserModel.confirmPassword) {[unowned self] (model, value) in
        print("Confrim Password Observeer called with value :\(self.registerModel.confirmPassword)")
    }
   // self.registerModel.confirmPassword = "CALLED WITH THIS LINE INSIDE INIT FUNC ONLY" 


}

当文本字段值从视图控制器更改时应该调用观察者,所以我registerModel.confirmPassword = strupdateField 方法设置

但是print语句没有被执行

但是如果我从init 方法中更改值,那么观察者正在工作!

如何使其全球化?

额外信息

我如何改变财产

extension RegisterViewModel {

    func updateField (field:RegisterFields, withString str:String) {
        switch field {
        case .firstName:
            registerModel.firstName = str

        case .lastName:
            registerModel.lastName = str

        case .email:
            registerModel.email = str

        case .phone:
            registerModel.phone = str

        case .city:
            registerModel.city = str

        case .password:
            registerModel.password = str
            confirmPassword.value = confirmPassword.value

        case .confirmPassword:
            registerModel.confirmPassword = str //SHOULD BE CALLED FROM HERE
        }
    }
}
4

1 回答 1

0

哦亲爱的 !!

我添加了全局对象

private var confirmPasswordObserver : NSKeyValueObservation?

并使用这个对象。

  confirmPasswordObserver = self.registerModel.observe(\RegisterUserModel.confirmPassword) {[unowned self] (model, value) in
            print("Confrim Password Observeer called with value :\(self.registerModel.confirmPassword)")
        }

它现在正在工作。但我想知道是否有人可以向我解释这一点。即使 confirmPasswordObserver 未使用,它仍然需要全局范围

希望有人可以从中得到帮助,所以我决定不删除它

于 2018-03-16T07:38:33.120 回答