一、基本概念
1.1、函数响应式编程
1.1.1 函数式
函数式编程简称FP(Functional Programming)
,函数式编程就是一种抽象程度很高的编程范式,它将计算机运算看做是数学中函数的计算,而纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
函数式编程的一个特点就是:允许把函数本身作为参数传入另一个函数,同时还允许返回一个函数!
函数表达式: y = f(x) —> x = f(x) —> y = f(f(x))
常规需求例子,感受函数式的舒服!
- 对于数组
[1,2,3,4,5,6,7,8,9,10]
,首先获取> 2
的数字, - 获取到的数字之后 + 1,
- 再输出所有数字中的偶数
let array = [1,2,3,4,5,6,7,8,9,10]
for num in array{
if num > 2{
let number = num + 1
if (number % 2 == 0) {
print(number)
}
}
}
- 上面的代码嵌套层次之深,我觉得已经非常恶心
- 代码的可读性也是非常差的
- 代码复用性较低
- 维护以及代码构建成本太高,这样就成了函数式出现的必要性
let array = [1,2,3,4,5,6,7,8,9,10]
array.filter{ $0 > 2}
.filter{ ($0+1) % 2 == 1}
.forEach { print($0) }
- 代码层次非常清晰
- 代码可读性高
- 代码复用性高
- 代码简洁,直接面向开发需求
1.1.2 响应式
对象对某一数据流变化做出响应的这种编码方式称为响应式。
例如我们在爱奇艺平台观看视频,我们只需要在某一个时刻订阅了这个视频,后面平台自媒体运营者不断更新视频,我们随着时间也能自定接受推送,这就是响应
在iOS开发中我们经常会响应一些事件button、tap、textField、textView、notifaction、KVO、NSTimer
等等这些,都需要做响应监听,响应后都需要在对应的响应事件中去做处理,而原生开发中,触发对象与响应方法是分离的,如button
的初始化和点击响应方法是分离的。功能代码与逻辑代码分析,导致很多比较恶心的感觉!
blingbling, blingbling, blingbling!
RxSwift 闪亮登场
1.2、RxSwift简介
RxSwift
是 ReactiveX
家族的重要一员, ReactiveX
是 Reactive Extensions
的缩写,一般简写为 Rx
。ReactiveX
官方给Rx
的定义是:Rx是一个使用可观察数据流进行异步编程的编程接口。
ReactiveX
不仅仅是一个编程接口,它是一种编程思想的突破,它影响了许多其它的程序库和框架以及编程语言。它拓展了观察者模式
,使你能够自由组合多个异步事件
,而不需要去关心线程
,同步,线程安全
,并发数据以及I/O阻塞
。
RxSwift
是 Rx
为 Swift
语言开发的一门函数响应式编程语言, 它可以代替iOS系统的 Target Action
/ 代理
/ 闭包
/ 通知
/ KVO
,同时还提供网络
、数据绑定
、UI事件处理
、UI的展示和更新
、多线程
……
鉴于Swift
日渐增长的影响力,ios开发者不可避免的要学习和使用Swift
这门语言进行编程开发。而RxSwift
对使用Swift
的帮助有如下几点:
Swift
为值类型,在传值与方法回调上有影响,RxSwift
一定程度上弥补Swift
的灵活性
RxSwift
使得代码复用性较强,减少代码量RxSwift
因为声明都是不可变更,增加代码可读性RxSwift
使得更易于理解业务代码,抽象异步编程,统一代码风格RxSwift
使得代码更易于编写集成单元测试,增加代码稳定性