【问题标题】:How to bind from Swift view model to Obj-c view controller?如何从 Swift 视图模型绑定到 Obj-c 视图控制器?
【发布时间】:2016-06-28 21:16:23
【问题描述】:

我正在使用 ReactiveCocoa 4.1.0,并且正在将(新)Swift 视图模型与(旧版)Obj-c 视图控制器连接起来。我在使用 RACObserve 从视图模型中观察字符串属性时遇到问题。我不能使用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() 观察之后也是如此。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: ios objective-c swift reactive-programming reactive-cocoa


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      RACObserve 是基于 KVO 的。如果你想在 swift 中使用 KVO,类应该继承 NSObject 类。 KVOImplementation

      正如@David Rodrigues 所说:

      dynamic var buttonTitle: String?
      

      【讨论】:

      • 我的视图模型继承自NSObject
      • 正如@David Rodrigues 所说:dynamic var buttonTitle: String?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 2021-07-01
      相关资源
      最近更新 更多