函数响应式编程
ReactiveCoCoa是iOS中实践函数响应式编程的利器。
函数式编程的特点是:
数据结构比较少,鼓励函数的重用,通过组合不同的函数行程高阶函数来满足需求
面向对象通过封装不确定因素来使得代码被人理解,而函数式编程通过减少不确定因素来使得代码被人理解
函数式的架构都是基于值不可变无副作用这个特点。
响应式编程特点是:
面向数据流和变化传播的编程范式
a=b+c, a的值随着b和c的更新而更新,就像Excel一样
可以显示的使用箭头来表示数据流向
图解RAC
ReactiveCocoa的源码阅读起来相对其他开源代码来说更不容易,因为需要很多函数式编程的思维。我喜欢把难以理解的概念在脑中用图构思出来,所以这篇文章将用图片来描述我脑中的RAC思想。
RACSigal
RACSigal是RAC中的一个重要的类,如果按照黑盒的理解,RACSigal是个魔法一般的箱子,它可以把传送给它的数据在箱子里面经过各种操作变换成另一种东西,然后再传递给下一个箱子。而它可以变换成好多东西,可以是一个数字,也可以是一个新的箱子(RACSignal)。
subcribe
(RACDisposable *)subscribe:(id)subscriber;
subscribe是订阅者向RACSigal建立起了订阅关系,通过一条虚线来表示订阅,同一个箱子可能会和多个订阅者连接,当箱子里面有值传出的时候,会向所有订阅者发送值。
map
map是箱子里面那坨乱七八糟的线,魔法一样地把输入到箱子里面的值变成另一个值,再包装成新的箱子,所有订阅这个新箱子的订阅者都将接受到这个新值。
flattenMap
flattenMap是RAC中非常多operator的基础函数。flattenMap把传入的值转变成一个个新的箱子,然后把这些箱子拆箱,再把值输出给订阅者。