Combine 框架总结

209 阅读2分钟

概述

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 工作流程

  1. Publisher 负责发布事件流。
  2. Subscriber 订阅 Publisher,主动请求数据。
  3. Publisher 根据请求发送值。
  4. 可通过 Operators 组合和转换事件流。
  5. 订阅关系由 Subscription 管理,可取消。
  6. Subjects 允许外部主动发送事件。
  7. 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 控制事件执行的时机和线程。

该框架帮助开发者以声明式方式处理异步事件,简化代码结构,提高可维护性。