- 由于
Swift
是一门静态语言,对于相应数值的传递、响应的回调、通讯等系列会有一定的影响,不像Objective-C
具备运行时机制能够动态的传递发送消息这么灵活,而RXSwift
弥补了这一点。 -
Swift
函数响应式编程思想也是每个开发者在未来的开发中必须掌握的 -
Swift
是iOS
接下来开发的重点,而函数响应式编程也是Swift
未来的趋势 -
ReactiveX
是一个跨平台框架
RXSwift
特点:
复合 - Rx
就是和复合的代名词
复用 - 复用性比较强 - 代码量降低
清晰 - 因为声明都不可变更,代码函数式编程可读性强
易用 - 理解容易,还抽象了异步编程,统一代码风格
稳定 - 因为 Rx
是完全通过单元测试的
装逼 - 代码的逼格很明显比原生高太多了
说到RXSwift
首先得提到FRP
函数式编程
函数式编程(Functional
Programming
)是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ
演算(lambda
calculus
),而且λ
演算的函数可以接受函数当作输入(参数)和输出(返回值)。
和指令编程相比,函数式编程强调函数的计算比指令的执行重要。
和过程化编程相比,函数式编程里函数的计算可随时调用。
通过案例测试发现函数式的编程逻辑比以往普通的逻辑更具有可读性和清晰度
响应式编程
响应式编程(Reactive
Programming
)是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
通过伪代码可了解到a
的值改变后b
的值并不会相应的改变,而在a
的值改变的同时b
的值也跟着改变这就是响应式
监听和响应绑定在一起就是KVO
,而KVO
里最重要的也就是”三部曲 “
通过案例发现虽然观察者模式实现了响应但是功能和业务逻辑的代码是分散,这里的接口还不是很多,如果有上百个那查找响应的接口实现是非常痛苦的,接下来就引入一个牛逼的框架RXSwift
。
通过案例发现RXSwift
应用在KVO
的简单方便,而除了KVO
,其实还可应用在UI
层
可以发现常规绑定按钮的响应事件是需要单独实现一个响应的函数,即业务逻辑和功能分开了
案例中按钮的点击的响应功能和逻辑代码写在了一起
通过上面的观察者模式和按钮响应的点击响应发现为什么都可以.rx
呢?
在RXSwift
的源码中可看到RXSwift
对NSObject
进行了扩展实现了ReactiveCompatible
协议,在协议中定义了rx
的协议属性,这也就是为什万物皆可.rx
的原因。
通过上面案例发现通过rx
的绑定函数直接将textField
的文本信息绑定到了button
的title
上,这使得UI
效果就变得很简单了,而且更面向开发者,切记盲目使用因为会上瘾。
RXSwift
滚动视图应用
RXSwift
手势的应用
RXSwift
通知的应用
RXSwift
定时器的应用
在定时器的应用中,此定时器并不是NSTimer
而是继承于Producer
的Timer
,并且测试可发现在滚动视图滑动式并不会堵塞定时的任务
RXSwift
网络的应用
通过RXSwift
的封装将网络请求的响应、错误、数据都进行了分层,分层后显得更简单了
序列
订阅Next
信号
在时间轴上可能会订阅到1
,2
,3
,4
,5
但也可能还有很多,即可能为有穷序列也可能为无穷序列
订阅Error
信号
当订阅到Error
信号时,序列为有穷序列
订阅完成Complete
信号
当订阅到Complete
信号时,序列为有穷序列
RXSwift
无穷序列可表现为
RXSwift
有穷序列可表现为
通过以上的案例也验证了序列的核心流程三部曲
通过案例发现订阅中心的测试流到了订阅信号的闭包里面,这个逻辑又是怎么实现的呢?请看RXSwift
序列核心逻辑