2

Colin Eberhardt は、reactive-cocoa 3 でいくつかのバインドを行う方法に関する素晴らしい記事を書いています。ただし、私があまり気に入らない解決策が 1 つあります。それは彼のテキスト フィールドに関係していました。ビューモデルで観察していた「searchtext」のプロパティをViewModelに作成し、それをテキストフィールドのテキストにバインドしました。ビューモデルはこのテキストを保持すべきではなく、ビューモデル以外の誰もがそのテキストを観察できるべきではないので、私はこれのファンではありません。Signal私にとって、これは aまたはのいずれかによって達成されるべきSignal Producerです。

だから私の質問は、このデータを渡すための推奨される方法は何かということです.UITextViewをビューモデルに渡してそれに基づいて動作させるとしましょう。私はそれを達成するためにこれまでに2つの方法があります:

  • ビューモデル

    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ここでもいくつかの基本的な概念が欠けている可能性があります.

4

0 に答える 0