当然首先第一个资源是raywenderlich的Reactive programming with swift。
什么是rxswift?
|
|
不大懂,没关系,一步一步来,竟然提到了异步,那么先来看看异步编程的术语,rxswift和异步,响应式,函数式编程等紧紧相关,所以如果你知道一些术语,能够帮助你更好的理解rxswift。
异步编程术语
1. 状态(state) ,特别是共享的可变状态(shared mutable state)
状态比较难定义,我们看下面的例子:
当你打开你的笔记本电脑,他正常运行。但是你用了几天或者几周后,他可能就变得有些异常,突然卡顿或者拒绝响应等。硬件和软件都是一样的,但是状态变了。只要你重启,同样的软件和硬件又能正常工作。
内存中的数据,磁盘上的数据,用户输入的响应以及所有从服务器拉取数据后残留的痕迹等,—-他们的总和就是你笔记本的状态。
2. 命令式编程(Imperative programming)
Imperative programming是一种 用陈述式语句来改变程序状态的一种范式。就像你和你的狗狗玩耍时说的:“过来” “躺下” “装死”。你也通过命令式的代码告诉你的app什么时候做什么事。不过这种命令式的代码会给我们带来许多问题,特别是在处理复杂的,异步的逻辑时。比如:
|
|
这里并不知道这些方法到底干了什么,会改变viewcontroller的某个属性么?更让人不安的是,他们调用的顺序对么?如果某个人交换了他们的顺序并提交到git上。那么app可能因为函数的交换就不能正常运行了。
3.副作用(side effects)
副作用是当前作用域外的状态的改变。比如上面例子中的connectUIControls。他可能会为UI绑定时间,这就产生了副作用,因为view的状态改变了:函数调用前的行为和调用后的行为不一样了。任何时候你存储数据到磁盘或者更新label的text都引起了副作用。
副作用并不是指坏的影响。总之,我们的最终目的就是产生副作用。你的程序运行后需要改变状态。
副作用的问题在于是否已一种可控的方式执行(doing it in a controlled way)。你必须能够确定哪部分代码产生副作用,哪些是仅仅处理和输出数据。
Rxswift会解决上面的问题,我们看看下面的rxswift的一些概念。
4.描述式的代码(declarative code)
描述式的代码定义了一坨行为(behavior),rxswift会在相关的事件到达时运行这些behavior,并且提供给behavior的输入是可以确定不变的。
这种方式也适用于异步代码。你不用再怀疑你的代码是否是按顺序,确定的执行的了。
5.响应式系统(reactive system)
他具有以下特性:
- Responsive: 总是保持UI是最新的。
- resilient:每种行为(behavior)都是隔离的,而且有一定的错误恢复机制
- Elastic:代码能够处理各种负载,这些特性包括:event throttling ,resource sharing等。
- Message driven:各个组件都通过事件来交流,从而实现重用和隔离,将类的生命周期和实现解耦。
rxswift的代码由三部分组成:Observables,operators,schedulers。
Observales
一个Observale能够发射三种类型的值:
- .next : 带有最新值得事件
- .completed:表示生命周期正常结束,不会再产生其他事件
- .error: 产生了错误退出,不会再产生任何事件
Operator
Rxswift提供了许多操作符:map,flatmap,zip,timer等,能让我们用描述的方式编写代码,以后再看
schedulers
scheduler等价于rx的dispatch queue实现。能帮助我们处理各种异步事件。
这一章主要就是介绍了rxswift想要解决的问题,对rxswift有个大概的了解,明天继续看Observables。