ReactiveCocoa 其实就是一个用来帮我们处理事件的一个第三方的框架!
ReactiveCocoa结合了几种编程风格:
函数式编程(Functional Programming):使用高阶函数,例如函数用其他函数作为参数。
响应式编程(Reactive Programming):关注于数据流和变化传播。
所以,你可能听说过ReactiveCocoa被描述为函数响应式编程(FRP)框架。
首先你需要导入这个第三方库,一般使用cocoapods进行管理,不懂的可以百度一下,最近安装pod可能会遇到很多问题,不过你遇到的问题有人比你遇到的早,所以很不幸,别人都替你解决了,你只需要找到解决方法即可,可以参考我的另一篇文章2016安装cocoapods。需要注意的是,你search到的是最新的ReativeCocoa,支持swift3.0的。如果你的项目是OC语言写的话,会不支持,我用的是v2.4.4,支持OC最新版本是v2.5。不废话了,写一个简单的登录界面吧,理解下RAC是如何如何强大的!
1.RACSiganl:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据。
信号类(RACSiganl),只是表示当数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出。默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发。调用信号RACSignal的subscribeNext就能订阅。


2.RACSubject:RACSubject:信号提供者,自己可以充当信号,又能发送信号。使用场景:通常用来代替代理,有了它,就不必要定义代理了。
RACReplaySubject:重复提供信号类,RACSubject的子类。
RACReplaySubject与RACSubject区别:RACReplaySubject可以先发送信号,在订阅信号,RACSubject就不可以。
使用场景一:如果一个信号每被订阅一次,就需要把之前的值重复发送一遍,使用重复提供信号类。使用场景二:可以设置capacity数量来限制缓存的value的数量,即只缓充最新的几个值。




下面简单的使用下跳转rac_signalForControlEvents 和代理;







3.RACCommand:RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,他可以很方便的监控事件的执行过程。使用场景:监听按钮点击,网络请求
网友评论