Colin Eberhardt a great article关于如何在反应可可3中进行一些绑定。然而,有一个解决方案我并不是非常喜欢,而且它与他的文本字段有关。他在他的ViewModel中为" searchtext" 创建了一个属性,他在他的视图模型中观察到了这个属性,并将其绑定到文本字段的文本中。我并不喜欢这个,因为在我看来,视图模型不应该保留在这个文本上,除了视图模型之外,任何人都不应该能够观察到该文本。对我来说,这应该由Signal
或Signal Producer
完成。
所以我的问题是推荐的方法是传递这些数据,让我们说UITextView到视图模型来对其进行操作。到目前为止,我有两种方法可以完成它:
视图模型
var signalProducer: SignalProducer<String, NSError>? {
didSet {
if let signalProducer = signalProducer {
signalProducer
... do stuff
}
}
}
的ViewController
viewModel.signalProducer = textView.rac_textSignal().toSignalProducer()
|> map { text in text as! String }
(我的视图模型是否可以直接访问信号生成器?)
或者
视图模型
let (textViewTextSignal, textViewTextSink) = Signal<String, NoError>.pipe()
init() {
textViewTextSignal
... do stuff with it
}
的ViewController
textView.rac_textSignal().toSignalProducer()
|> map { text in text as! String }
|> start(next: { [unowned self] text in
sendNext(self.viewModel.textViewTextSink, text)
})
(任何物体都能触发此信号吗?)
我可能在Signal
和Signal Producer
之间遗漏了一些基本概念,我只是想知道其他人是如何完成这种互动的。