ReactiveCocoa学习架构模式

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,这时两边会相互订阅:两边的属性变化会反应到另一端。

上一篇下一篇

猜你喜欢

热点阅读