如何从 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
。
我正在使用 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
。