谈谈ReactiveCocoa 函数响应式框架

高阶函数

提纲:

什么是纯函数(Pure Function)

副作用指的是,函数的行为受系统的全局状态所影响

为什么要有纯函数

什么是函数式编程

什么是副作用(Side Effect),副作用能做什么。

什么是函数响应式编程

什么Monad以及为什么要引入Monad

bind

return

ReactiveCocoa是如何实现响应式编程的

ReactiveCocoa bind的实现

ReactiveCocoa return的实现

ReactiveCocoa封装的一系列操作符

Functor:任何类别只要能执行fmap操作,就是一个Functor
fmap就是把一个函数应用在一个盒子里的值上,然后返回一个封装在盒子里的新值;

对于空值也就是Nothing来说,执行fmap操作后返回的还是Nothing

对于List而言,执行fmap,会将函数应用在List的每一个值都上,并返回一个新的List

总结一下:Functor是能将函数应用在值上的一种类型。换句话说,Functor就是支持将一个值映射成另一个新值的类型

那如果要将一个函数应用在另一个函数上呢?

也就是说一个函数执行了fmap操作后可以映射成一个新的函数,因此说函数也是Functor
函数的fmap 操作就是函数的复合

Functor:
将一个普通函数应用到被封装的值上

Applicative:
将一个封装的函数应用在封装的值上

Monad:
将一个“接收一个普通值并返回一个被封装的值”的函数应用在一个被封装的值上,这一任务由函数 >>=(读作“bind”)完成。

ReactiveCocoa是如何实现Monad的

RACStream被定义为一种Monad类型,定义了两个基本操作bindreturn

RACStreamBindBlock可以看做是“接收一个普通值并返回一个被封装的值”函数

IO操作: