Combine框架思维导图。Apple Combine 官方文档
mindmap
root(Combine框架)
核心协议
Publisher
Subscriber
Subscription
Subject
Scheduler
ObservableObject
发布者(Publishers)
基础发布者
AnyPublisher
Future
Just
Deferred
Empty
Fail
Record
可连接发布者
ConnectablePublisher
操作符发布者
Map
TryMap
Filter
CombineLatest
Merge
Catch
Retry
订阅者(Subscribers)
AnySubscriber
Sink
Assign
订阅管理
Subscriptions
AnyCancellable
主体(Subjects)
PassthroughSubject
CurrentValueSubject
调度器(Schedulers)
ImmediateScheduler
DispatchQueue
RunLoop
OperationQueue
观察对象(ObservableObject)
ObservableObjectPublisher
异步发布者
AsyncPublisher
AsyncThrowingPublisher
编解码器
TopLevelEncoder
TopLevelDecoder
调试标识
CustomCombineIdentifierConvertible
CombineIdentifier
迁移工具
NotificationCenter.Publisher
Timer.TimerPublisher
KVO发布者
一、Combine 框架核心结构
scss
├── 核心协议
│ ├── Publisher
│ ├── Subscriber
│ ├── Subscription
│ ├── Subject
│ ├── Scheduler
│ ├── ObservableObject
│ ├── TopLevelEncoder
│ ├── TopLevelDecoder
│ └── CustomCombineIdentifierConvertible
│
├── 发布者(Publishers)
│ ├── 基础发布者
│ │ ├── AnyPublisher
│ │ ├── Future
│ │ ├── Just
│ │ ├── Deferred
│ │ ├── Empty
│ │ ├── Fail
│ │ └── Record
│ │
│ ├── 可连接发布者
│ │ └── ConnectablePublisher
│ │
│ └── 操作符发布者
│ ├── Map
│ ├── Filter
│ ├── CombineLatest
│ ├── Merge
│ ├── Zip
│ ├── Catch
│ ├── Retry
│ └── Debounce
│
├── 订阅者(Subscribers)
│ ├── AnySubscriber
│ ├── Sink
│ ├── Assign
│ └── Demand
│
├── 订阅管理
│ ├── AnyCancellable
│ ├── Subscriptions
│ └── CombineIdentifier
│
├── 主体(Subjects)
│ ├── PassthroughSubject
│ └── CurrentValueSubject
│
├── 调度器(Schedulers)
│ ├── ImmediateScheduler
│ ├── DispatchQueue
│ ├── RunLoop
│ └── OperationQueue
│
├── 观察对象系统
│ ├── ObservableObject
│ ├── ObservableObjectPublisher
│ └── Published
│
├── 异步序列支持
│ ├── AsyncPublisher
│ └── AsyncThrowingPublisher
│
└── Foundation集成
├── NotificationCenter.Publisher
├── Timer.TimerPublisher
├── URLSession.DataTaskPublisher
└── KVO发布者
二、关键组件说明
-
核心协议
Publisher
: 定义值序列提供者的基本协议Subscriber
: 接收和处理值的协议Subscription
: 管理发布者-订阅者生命周期的协议
-
发布者体系
- 基础发布者 : 直接创建数据流的类型
Just(值)
: 发送单个值后立即完成Future { 承诺 in ... }
: 异步操作结果发布者
- 操作符发布者 : 转换数据流的类型(通过操作符创建)
.map(转换函数) → Map
.filter(条件) → Filter
- 基础发布者 : 直接创建数据流的类型
-
订阅系统
sink { 值 in ... }
: 通过闭包接收值.assign(to: \.属性, on: 对象)
: 绑定到属性AnyCancellable
: 自动管理订阅生命周期
-
Subject 特殊发布者
PassthroughSubject()
: 无初始值的管道CurrentValueSubject(初始值)
: 带当前值的管道
-
调度器
DispatchQueue.main
: 主线程调度.subscribe(on: 后台队列)
: 指定订阅执行位置.receive(on: 主队列)
: 指定值接收位置
-
SwiftUI 集成
swiftclass ViewModel: ObservableObject { @Published var username = "" // 自动发布变化 let objectWillChange = ObservableObjectPublisher() }
三、官方文档结构详解
1. 核心协议 (Core Protocols)
协议 | 描述 | 关键方法 |
---|---|---|
Publisher |
值序列提供者 | receive(subscriber:) |
Subscriber |
值序列消费者 | receive(subscription:) , receive(_:) , receive(completion:) |
Subscription |
发布者-订阅者契约 | request(_:) , cancel() |
Subject |
既是发布者又是订阅者 | send(_:) , send(completion:) |
Scheduler |
执行调度策略 | schedule(options:_:) |
ObservableObject |
可观察对象协议 | 自动生成 objectWillChange 发布者 |
2. 发布者类型 (Publishers)
类型 | 类别 | 特点 |
---|---|---|
AnyPublisher |
类型擦除 | 隐藏具体发布者类型 |
Future |
异步单值 | 执行异步操作后发出单个值 |
Just |
立即单值 | 立即发出预设值并完成 |
Deferred |
延迟创建 | 直到订阅时才创建发布者 |
Empty |
空序列 | 可选择立即完成或永不完成 |
Fail |
立即失败 | 立即发出错误并终止 |
Record |
录制回放 | 记录预设序列用于测试 |
URLSession.DataTaskPublisher |
网络请求 | 封装 URLSession 的数据任务 |
NotificationCenter.Publisher |
通知中心 | 观察系统通知 |
3. 订阅管理 (Subscription Management)
类型 | 作用 |
---|---|
AnyCancellable |
自动取消订阅的包装器 |
Subscriptions |
订阅相关的命名空间 |
Set<AnyCancellable> |
管理多个订阅的标准模式 |
4. 调度系统 (Schedulers)
调度器 | 使用场景 |
---|---|
ImmediateScheduler |
同步执行,无延迟 |
DispatchQueue |
多线程管理,支持 QoS |
RunLoop |
主线程 UI 更新 |
OperationQueue |
任务依赖管理 |
5. 特殊组件
组件 | 描述 |
---|---|
AsyncPublisher |
将 Combine 发布者转换为 AsyncSequence |
AsyncThrowingPublisher |
可能抛出错误的异步序列 |
TopLevelEncoder |
通用编码协议 (如 JSONEncoder) |
TopLevelDecoder |
通用解码协议 (如 JSONDecoder) |
CombineIdentifier |
调试用唯一标识符 |
四、完整文档结构对应表
文档章节 | 包含主要类型 |
---|---|
Publishers | AnyPublisher, Future, Just, Deferred, Empty, Fail, Record |
Subscribers | AnySubscriber, sink, assign |
Subjects | PassthroughSubject, CurrentValueSubject |
Schedulers | ImmediateScheduler, DispatchQueue |
Observable Objects | ObservableObject, ObservableObjectPublisher |
Asynchronous Publishers | AsyncPublisher, AsyncThrowingPublisher |
Encoders and Decoders | TopLevelEncoder, TopLevelDecoder |
Debugging Identifiers | CustomCombineIdentifierConvertible, CombineIdentifier |