swift 中 Combine框架技术点汇总表

826 阅读3分钟

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 框架核心结构

├── 核心协议
│   ├── 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发布者

二、关键组件说明

  1. 核心协议

    • Publisher: 定义值序列提供者的基本协议
    • Subscriber: 接收和处理值的协议
    • Subscription: 管理发布者-订阅者生命周期的协议
  2. 发布者体系

    • 基础发布者: 直接创建数据流的类型
      • Just(值): 发送单个值后立即完成
      • Future { 承诺 in ... }: 异步操作结果发布者
    • 操作符发布者: 转换数据流的类型(通过操作符创建)
      • .map(转换函数) → Map
      • .filter(条件) → Filter
  3. 订阅系统

    • sink { 值 in ... }: 通过闭包接收值
    • .assign(to: \.属性, on: 对象): 绑定到属性
    • AnyCancellable: 自动管理订阅生命周期
  4. Subject 特殊发布者

    • PassthroughSubject(): 无初始值的管道
    • CurrentValueSubject(初始值): 带当前值的管道
  5. 调度器

    • DispatchQueue.main: 主线程调度
    • .subscribe(on: 后台队列): 指定订阅执行位置
    • .receive(on: 主队列): 指定值接收位置
  6. SwiftUI 集成

    class 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调试用唯一标识符

四、完整文档结构对应表

文档章节包含主要类型
PublishersAnyPublisher, Future, Just, Deferred, Empty, Fail, Record
SubscribersAnySubscriber, sink, assign
SubjectsPassthroughSubject, CurrentValueSubject
SchedulersImmediateScheduler, DispatchQueue
Observable ObjectsObservableObject, ObservableObjectPublisher
Asynchronous PublishersAsyncPublisher, AsyncThrowingPublisher
Encoders and DecodersTopLevelEncoder, TopLevelDecoder
Debugging IdentifiersCustomCombineIdentifierConvertible, CombineIdentifier