我的Github地址 :Jerry4me,本文章的demo链接 :JRReactiveCocoa
@H_301_3@ RAC与MVVM如今已经不是一个新鲜的玩意了,对于介绍他们两的精品文章更是大把,这篇文章主要是用来记录自己学习RAC的过程以及RAC的一些用法,以防以后要用到的时候却记不起来了. @H_301_3@ 具体RAC的用法以及本文出现的代码均能在我的Github上,另外附有2个MVVM的小demo. 欢迎大家查看,赏脸的给个star~RAC编程思想
@H_301_3@ 编程学的是思想,学一样东西最主要是学会它的思想,那才是它的灵魂,而不是学习调用方法而已. @H_301_3@ RAC又被称为FRP,函数响应式编程. @H_301_3@ 何为函数式? 把操作写成一系列嵌套的函数或者方法调用
1
|
[
[
Person
getup
]
eat
run
goHome
]
;
|
何为响应式? 不需要考虑调用顺序,只考虑结果. 一个属性,一个请求改变马上引发一系列改变.
1
2
|
data
stream
->
(
filter
,
combine
map
.
)
another
stream
stream是基于时间上的事件流
|
RAC使用场景 @H_301_3@ 数据随着时间而产生,例如以下三点 :
- UI操作,连续的动作和动画部分,例如某些控件跟随滚动
- 网络库,因为数据是在一定时间后才返回回来,不是立刻返回的
- 刷新的业务逻辑,当触发点是多种的时候,业务往往会变得很复杂,用delegate,notification,observe混用,难以统一. 这时用RAC能保证上层的高度一致性,从而简化逻辑上分层.
RAC类关系图 @H_301_3@ RAC类的关系图如下,下面会抽出一部分类进行讲解,另外有部分类与用法会在github上的demo上看得到,还有部分类将不在本文中出现,本文(demo)只说明了一些常用的类与方法.
ReactiveCocoa类图.png
信号源
RACStream.ng
RACSignal
@H_301_3@ RACSignal只会向订阅者发送三种事件 :next
,error
和completed
.
@H_301_3@ RACSignal的一系列功能是通过类簇来实现的. 如 :
核心方法 :-subscribe:
.
RACSubject
继承自RACSignal,是可以手动控制的信号,相当于RACSignal的可变版本.
能作为信号源被订阅者订阅,又能作为订阅者订阅其他信号源(实现了RACSubscriber协议).
RACSubject有三个用来实现不同功能的子类 :
3