如何从 Swift 视图模型绑定到 Obj-c 视图控制器?

How to bind from Swift view model to Obj-c view controller?

我正在使用 ReactiveCocoa 4.1.0,并且正在将(新)Swift 视图模型与(旧版)Obj-c 视图控制器连接起来。我在使用 RACObserve 从视图模型观察 String 属性时遇到问题。我不能使用 MutableProperty 因为视图控制器在 Obj-c 中。 RACObserve subscribeNext 在第一次设置属性时触发一次,但在更改它们之后,似乎没有信号触发。我基本上:

在视图控制器中:

[RACObserve(self.viewModel, buttonTitle) subscribeNext:^(NSString *title) {
    // Do something
    }];

在视图模型中:

init() {
   self.buttonTitle = "Original Value"
}
func foo() {
   self.buttonTitle = "Changed Value"
}

我看到原始值着火了,但从未看到更改后的值,即使在将更改放入 Signal Producer 并使用 observeOn(UIScheduler()).start()

进行观察后也是如此

有什么想法吗?

谢谢!

RACObserve是基于KVO.If你想在swift中使用KVO,class应该继承NSObjectclass。 KVOImplementation

正如@David Rodrigues 所说:

dynamic var buttonTitle: String?

您需要确保通过 KVO 观察到的任何 属性 都被标记为 dynamic