2

Colin Eberhardt 有一篇很棒的文章,介绍了如何在反应可可 3 中进行一些绑定。但是,有一个我不太喜欢的解决方案,它与他的文本字段有关。他在他的 ViewModel 中为他在他的视图模型中观察到的“searchtext”创建了一个属性,并将它绑定到文本字段的文本。我不喜欢这个,因为在我看来,视图模型不应该持有这个文本,也不应该任何其他人能够观察到除了视图模型之外的文本。对我来说,这应该由 aSignalSignal 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)
        })
    

(任何物体都应该能够触发这个信号吗?)


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

4

0 回答 0