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) })
(この信号をトリガーできるオブジェクトはありますか?)
Signal
とSignal Producer
ここでもいくつかの基本的な概念が欠けている可能性があります.