概述
Combine 是 Apple 提供的声明式 Swift API,用于处理随时间变化的异步事件流。它通过 Publisher(发布者)和 Subscriber(订阅者)模式,将异步事件以序列的形式传递和处理。
- Publisher:声明可随时间传递一系列值的类型。
- Subscriber:接收并处理来自 Publisher 的值。
- 订阅者控制数据流速(背压机制),只有请求时,Publisher 才发送数据。
- 支持组合多个 Publisher,协调它们的交互。
- 使代码更易读、维护,避免嵌套闭包和回调地狱。
主要组件
Publishers(发布者)
Publisher协议:定义了发布值的能力。- 常用内置 Publisher:
Just:只发送一个值后完成。Future:异步发送单个值或错误。Deferred:延迟创建 Publisher。Empty:不发送任何值,直接完成。Fail:立即发送错误终止。
AnyPublisher:类型擦除,包装其他 Publisher。Published:属性包装器,发布属性变化。
Subscribers(订阅者)
Subscriber协议:定义接收输入的能力。AnySubscriber:类型擦除的订阅者。Subscription协议:管理订阅关系,支持取消。
Subjects(主题)
- 既是 Publisher 也是 Subscriber。
CurrentValueSubject:持有当前值并发布更新。PassthroughSubject:仅传递新事件。
Schedulers(调度器)
- 定义任务执行的时间和方式。
- 支持同步和异步执行。
其他
- ConnectablePublisher:控制何时开始发布。
- ObservableObject:支持对象变化通知。
- 异步 Publisher:支持 Swift 异步序列。
Combine 工作流程
- Publisher 负责发布事件流。
- Subscriber 订阅 Publisher,主动请求数据。
- Publisher 根据请求发送值。
- 可通过 Operators 组合和转换事件流。
- 订阅关系由 Subscription 管理,可取消。
- Subjects 允许外部主动发送事件。
- Schedulers 决定事件处理的线程和时机。
Combine 框架工作流程图
flowchart TD
A[Publisher 发布者] -->|发送值| B[Subscriber 订阅者]
B -->|请求数据| A
A -->|组合多个发布者| C[Operators 操作符]
C --> B
B -->|取消订阅| D[Subscription 订阅]
D --> A
E[Subjects 主题] -->|既是发布者也是订阅者| A
F[Schedulers 调度器] -->|控制执行时间和线程| A
说明:
- Publisher 负责发布事件流。
- Subscriber 订阅并请求数据,控制数据流速。
- Operators 用于转换和组合事件流。
- Subscription 管理订阅生命周期,支持取消。
- Subjects 既能发布也能接收事件。
- Schedulers 控制事件执行的时机和线程。
该框架帮助开发者以声明式方式处理异步事件,简化代码结构,提高可维护性。