swift 中 Combine框架技术点汇总表

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发布者

二、关键组件说明

  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 集成

    swift 复制代码
    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 调试用唯一标识符

四、完整文档结构对应表

文档章节 包含主要类型
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
相关推荐
2501_916008891 小时前
iPhone 设备信息查看,用 KeyMob 看型号、序列号、电池健康和 UDID
android·ios·小程序·https·uni-app·iphone·webview
茶底世界之下21 小时前
iPhone Duo 适配实战,Awaking 踩过的 8 个坑
ios·swiftui·swift
跨境数据猎手1 天前
HTTP 响应体编码与压缩:识别、解码
网络协议·http·ios
也非非也1 天前
iPhone 中国区 AI 落地:Apple 与阿里千问合作的技术观察
大数据·人工智能·ios·agent·iphone·智子
茶底世界之下1 天前
同一片泳池,清透还是奶油胶片?用 Awaking 做两版成片
ios
2501_916008891 天前
iOS App 图标、启动屏和多语言搭配 方法,上架前使用KXBuild一次做好 App 图标
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_915918411 天前
iOS 推送通知怎么实现,从 APNs p8 密钥到 iOS 真机收到第一条推送
vscode·ios·objective-c·个人开发·swift·敏捷流程
茶底世界之下2 天前
雨夜街角裁成方图,人物与冷暖光还能共存吗?
ios
youdexiang2 天前
IOS录音APP拍照记录能和音频同步吗
ios·音视频
2501_915909062 天前
Windows 打开 Xcode 工程,编译调试 Xcode 项目并和 Mac 同事协作
ide·windows·vscode·macos·ios·个人开发·xcode