建议使用RAC3将用户输入传递给ViewModel的方法

时间:2015-08-23 09:27:40

标签: ios swift reactive-cocoa frp reactive-cocoa-3

Colin Eberhardt a great article关于如何在反应可可3中进行一些绑定。然而,有一个解决方案我并不是非常喜欢,而且它与他的文本字段有关。他在他的ViewModel中为" searchtext" 创建了一个属性,他在他的视图模型中观察到了这个属性,并将其绑定到文本字段的文本中。我并不喜欢这个,因为在我看来,视图模型不应该保留在这个文本上,除了视图模型之外,任何人都不应该能够观察到该文本。对我来说,这应该由SignalSignal 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)
        })
    

(任何物体都能触发此信号吗?)

我可能在SignalSignal Producer之间遗漏了一些基本概念,我只是想知道其他人是如何完成这种互动的。

0 个答案:

没有答案