Combine for Swift:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Combine,为什么需要它?

Combine 是 Apple 于 2019 年随 iOS 13 推出的响应式编程框架。它提供了声明式的 Swift API,用于处理随时间变化的事件。Combine 允许将异步事件处理操作符组合成数据处理管道(pipeline)。

Combine 的主要任务是简化异步操作的处理:网络请求、通知、KVO(键值观察)、定时器、委托和回调函数。Combine 没有采用分散的机制,而是基于 Publisher(发布者)和 Subscriber(订阅者)提供了统一的接口。

关键概念:

  • Publisher — 数据源,可以发送值并完成(成功或出错)。
  • Subscriber — 数据接收者,响应来自 Publisher 的事件。
  • Operator — 转换、过滤或组合数据流的方法。
  • Subscription — Publisher 和 Subscriber 之间的连接,管理数据流。

Combine 与 SwiftUI 和 Foundation 紧密集成,使其成为现代 iOS 应用程序不可或缺的一部分。



安装

Combine 是 Apple 的内置框架。使用它无需通过 CocoaPods、SPM 或 Carthage 安装额外的包。它从 iOS 13、macOS 10.15、tvOS 13 和 watchOS 6 开始可用。

要开始使用 Combine,只需在 Swift 文件中导入它:

import Combine

如果您使用 Swift Package Manager 管理依赖项,Combine 已包含在标准库中。对于支持较旧操作系统版本的项目,可以使用 OpenCombine — Combine 的开源实现。

通过 SPM 安装 OpenCombine:

// 在 Package.swift 中dependencies: [    .package(url: "https://github.com/CombineOpenSource/Combine.git", from: "0.5.0")]


快速入门与代码示例

考虑一个最简单的示例:从数组创建 Publisher 并订阅它。

import Combine

// 1. 从数组创建 Publisherlet publisher = [1, 2, 3, 4, 5].publisher

// 2. 创建 Subscriberlet subscriber = Subscribers.Sink<Int, Never>( receiveCompletion: { completion in print("完成: \\(completion)") }, receiveValue: { value in print("收到值: \\(value)") })

// 3. 订阅publisher.subscribe(subscriber)

控制台输出:

收到值: 1收到值: 2收到值: 3收到值: 4收到值: 5完成: finished

使用 sink 操作符的更惯用方式:

import Combine

let cancellable = [1, 2, 3, 4, 5].publisher .sink(receiveCompletion: { print($0) }, receiveValue: { print($0) })

请注意:sink 返回一个 AnyCancellable。需要保留它,否则订阅将在离开作用域后立即被取消。



主要方法/函数



1. sink(receiveCompletion:receiveValue:)

功能: 创建一个订阅者,接收来自 Publisher 的所有值和完成事件。这是订阅流的最简单方式。

参数:

  • receiveCompletion — 完成时(成功或出错)调用的闭包。接受 Subscribers.Completion<Failure>。
  • receiveValue — 每次收到新值时调用的闭包。

示例:

let cancellable = Just("Hell                    

推荐