Colin Eberhardt 有一篇很棒的文章,介绍了如何在反应可可 3 中进行一些绑定。但是,有一个我不太喜欢的解决方案,它与他的文本字段有关。他在他的 ViewModel 中为他在他的视图模型中观察到的“searchtext”创建了一个属性,并将它绑定到文本字段的文本。我不喜欢这个,因为在我看来,视图模型不应该持有这个文本,也不应该任何其他人能够观察到除了视图模型之外的文本。对我来说,这应该由 aSignal
或Signal Producer
.
所以我的问题是推荐的方法是将这些数据从哪里传递,比如说 UITextView 到视图模型以对其进行操作。到目前为止,我有两种方法来完成它:
视图模型
var signalProducer: SignalProducer<String, NSError>? { didSet { if let signalProducer = signalProducer { signalProducer ... do stuff } } }
视图控制器
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 }
视图控制器
textView.rac_textSignal().toSignalProducer() |> map { text in text as! String } |> start(next: { [unowned self] text in sendNext(self.viewModel.textViewTextSink, text) })
(任何物体都应该能够触发这个信号吗?)
我可能在 和 之间也遗漏了一些基本概念Signal
,Signal Producer
我只是想知道其他人是如何完成这种交互的。