ReactiveCocoa单向绑定与双向绑定

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容