【发布时间】:2014-08-30 19:13:53
【问题描述】:
我正在使用 MVVM 和 ReactiveCocoa 构建一个应用程序来在 viewModel 和 UI 之间进行绑定,但是没有调用视图模型验证信号订阅块。
我的视图模型非常简单和准系统:
class ViewModel: RVMViewModel {
var name: String = "" {
willSet {
println("New Value: \(newValue)")
}
}
required init(){
super.init()
let signal = self.rac_valuesForKeyPath("name", observer: self)
signal.subscribeNext {
println("Subscribe block: \($0)")
}
}
}
在我的视图控制器中,我有以下绑定:
//observe ui and programatic changes
RACSignal.merge([self.nameField.racTextSignal(), self.nameField.rac_valuesForKeyPath("text", observer:self)]).subscribeNext({
(next) -> Void in
if let text = next as? String {
self.viewModel.name = text
}
})
RAC(self.nameField, "text") = self.viewModel.rac_valuesForKeyPath("name", observer: self)
根据我阅读的here,我让 RAC 宏在 swift 中运行。
现在,在我的视图控制器中的视图绑定中,subscribeNext 块被调用得很好。在我的 viewModel 中,将在 willSet 中打印出新值。但是,当属性首次初始化时,我的 init 块中的信号上的 subscribe 块仅被调用一次。这把我逼疯了,有人有什么想法吗?
【问题讨论】:
标签: ios mvvm swift reactive-cocoa