swift开发利器-RxSwift

一、为什么要使用RxSwift?

因为使用RxSwift框架我们可以使target-action代理闭包回调通知多个任务之间的依赖等待多个并发任务完成之后处理结果等等的编程场景变得逻辑清晰、易读、易维护

RxSwift的优点:

  • 复合 - Rx就是复合的代名词。
  • 复用 - 因为它易复合。
  • 清晰 - 因为声明都是不可变更。
  • 易用 - 因为它是抽象了的异步编程,使我们统一了代码风格。
  • 稳定 - 因为Rx是完全通过单元测试的。

二、函数响应式编程

什么是函数式编程?

函数式编程是种编程范式。它需要我们将函数作为参数传递,或者作为返回值返回。我们可以通过组合不同的函数来得到想要的结果。

函数式编程的优点:

  • 灵活
  • 高复用
  • 简洁
  • 易维护
  • 适应各种需求变化

什么是函数响应式编程?

函数响应式编程是种编程范式。它是通过构建函数操作数据序列,然后对这些序列作出响应的编程方式。它结合了函数式编程响应式编程

数据绑定

在RxSwift里有一个比较重要的概念就是数据绑定(订阅)。就是指将可监听序列绑定到观察者上。

三、RxSwift核心

RxSwift的核心组成如下:

  • Observable 产生事件
  • Observer 响应事件
  • Operator 创建变化组合事件(操作符)
  • Disposable 管理绑定(订阅)的生命周期
  • Schedulers 线程调配队列
RxSwift核心.png

3.1 可监听序列

所有的事物都是序列。

序列的类型如下:

  • Single: 要么只能发出一个事件,要么产生一个error事件。
  • Completable: 要么产生一个completed事件,要么产生一个error事件。
  • Maybe:发出一个元素或者一个 completed 事件或者一个 error 事件。
  • Driver:1.)不会产生error事件 2.)一定在MainScheduler监听(主线程监听)3.)共享附加作用
  • Signal: 和driver类似。
  • ControlEvent:1.)不会产生error事件 2.)一定在mainScheduler订阅 3.) 一定在manScheduler监听 4.)共享附加作用

driver和signal的区别:Driver会重新发送上一个元素,Signal不会。状态序列选Driver类型,事件序列选Signal类型

3.2 observer

响应事件的都是观察者。

观察者类型:

  • AnyObserver:任意观察者。
  • Binder:确保在给定scheduler上执行(默认mainScheduler),一般由于UI操作。

3.3 既是可监听序列也是观察者

  • AsyncSubject:发出最后一个元素或完成事件。
  • PublishSubject:对观察者发送订阅后产生的元素。
  • ReplaySubject:对观察者发送全部的元素。
  • BehaviorSubject: 将源 Observable 中最新的元素发送出来,然后发送新元素。
  • ControlProperty: 专门用于描述 UI 控件属性。

3.4 Schedulers(线程调配队列)

  • MainScheduler:代表主线程。如果你需要执行一些和 UI 相关的任务,就需要切换到该 Scheduler 运行。
  • SerialDispatchQueueScheduler:抽象了串行 DispatchQueue。如果你需要执行一些串行任务,可以切换到这个 Scheduler 运行。
  • ConcurrentDispatchQueueScheduler:抽象了并行 DispatchQueue。如果你需要执行一些并发任务,可以切换到这个 Scheduler 运行。
  • OperationQueueScheduler: 抽象了 NSOperationQueue。它具备 NSOperationQueue 的一些特点,例如,你可以通过设置 maxConcurrentOperationCount,来控制同时执行并发任务的最大数量。

3.5 operator(操作符)

RxSwift的操作符有很多种,具体见下图。


RxSwift操作符(一).png
RxSwift操作符(二).png
RxSwift操作符(三).png
RxSwift操作符(四).png

总结

本文主要对为什么要使用RxSwift框架?RxSwift的核心组成,与及RxSwift的操作符进行了整理。

文章主要内容来源于RxSwift

你可能感兴趣的:(swift开发利器-RxSwift)