ReactiveCocoa单向绑定与双向绑定
2017-09-17 本文已影响432人
tom555cat
在MVVM中,由于ViewController持有ViewModel,而ViewModel不能反向持有ViewController,所以,当ViewModel中发生变化时,需要通知ViewController,所以需要将ViewModel中的一些内容与ViewController绑定起来,这称为单向绑定;有时ViewController和viewModel中任何一端发生变化,对方都能知道,这称为双向绑定。ViewModel与Model之间的关系同理。
单向绑定
/// Examples
///
/// RAC(self, objectProperty) = objectSignal;
通常用RAC宏来实现属性objectProperty与信号objectSignal的绑定,而objectSignal通常用RACObserve这个宏来创建。
/// Creates a signal which observes `KEYPATH` on `TARGET` for changes.
/// // Observes self, and doesn't stop until self is deallocated.
/// RACSignal *selfSignal = RACObserve(self, arrayController.items);
///
/// // Observes the array controller, and stops when self _or_ the array
/// // controller is deallocated.
/// RACSignal *arrayControllerSignal = RACObserve(self.arrayController, items);
在单向绑定中,通常这么使用:
RAC(self, vcProperty) = RACObserve(self.viewModel, vmProperty);
双向绑定
RACChannelTo(self.textField, text) = RACChannelTo(self.viewModel, someProperty)
RACChannelTo()当被用作表达式时,返回RACChannelTerminal,可以用来监控属性的变化;当RACChannelTo()放在等号左侧时,右侧表达式必须是RACChannelTerminal,这时两边会相互订阅:两边的属性变化会反应到另一端。