ReactiveCocoa(其简称为RAC)是由Github 开源的一个应用于iOS和OS X开发的新框架。
1.有什么用?
总的来说,ReactiveCocoa为事件定义了一个标准接口,从而可以使用一些基本工具来更容易的连接、过滤和组合。它“相当于”于action、delegate、KVO、callback等的合体。它提供了一个统一提供统一的消息传递分发机制。它更能清晰的表达出消息传递中各种逻辑关系。
例如,在用户帐户的登录界面,通常会有2个输入框(分别输入帐号和密码)和一个登录按钮。如果我们要加入一个限制条件:当用户输入完帐号和密码,并且登录的网络请求还未发出时,确定按钮才可以点击。通常情况下,我们需要监听这两个输入框的状态变化以及登录的网络请求状态,然后修改另一个控件的enabled状态。
在RAC框架下可以这样写:
2.怎么用?
基本概念:
Signal and Subscriber
signal(信号)是不同事件流的一个标准接口,它负责获取数据源。它是RAC中消息传递的起点,然后把获取到的数据传递给Subscriber。Signal是很灵活的,它可以被修改(map), 过滤(filter), 叠加(combine), 串联(chain),这有助于应对更加复杂环境。
Subscriber 负责承接signal 传递的数据。一个signal没有Subscriber时什么也不干,此时处于冷状态。当有了Subscriber时才可以传递消息,处于热状态。Subscriber目前总共有三种类型的事件:next、error、completed。一个signal在因error终止或者完成前,可以发送任意数量的next事件。
注意以下几点:
-
ReactiveCocoa框架使用category来为很多基本UIKit控件添加signal。比喻说:
- 本质上RACObserve使用了KVO来监听property的变化,只要username被自己或外部改变,block就会被执行。但不是所有的property都可以被RACObserve,该property必须支持KVO,比如NSURLCache的currentDiskUsage就不能被RACObserve。
具体用法:
http://www.cocoachina.com/ios/20150123/10994.html
http://www.cocoachina.com/industry/20140115/7702.html