什么是 Combine?
Combine 是 Apple 在 WWDC 2019 推出的声明式 Swift API,用于处理随时间变化的值(如用户输入、网络响应、传感器数据等)。它基于响应式编程范式,帮助开发者以声明式方式组合异步事件流。
自 iOS 13 起,Combine 成为苹果生态中处理异步和事件驱动逻辑的78TP推荐方案。
核心概念
- Publisher(发布者):发出值或完成/失败信号的数据源。
- Subscriber(订阅者):接收来自 Publisher 的值并作出响应。
- <Operators(操作符):用于转换、过滤、合并数据流(如
map、filter、combineLatest等)。 - Subject:既是 Publisher 又是 Subscriber,常用于桥接非 Combine 代码(如
PassthroughSubject、CurrentValueSubject)。
简单示例
以下是一个使用 Combine 监听文本框变化并去重、延迟搜索的示例:
let searchText = PassthroughSubject<String, Never>()
searchText
.debounce(for: .milliseconds(300), scheduler: RunLoop.main)
.removeDuplicates()
.sink { query in
print("搜索关键词: $ query)")
}
.store(in: &cancellables)
Combine 的优势
- ✅ 声明式语法:逻辑清晰,易于理解与维护。
- ✅ 内存安全:自动管理生命周期,避免 retain cycle。
- ✅ 与 SwiftUI 深度集成:原生支持绑定状态与事件流。
- ✅ 链式操作:可轻松组合多个异步操作。
学习资源
想深入学习 Combine?推荐以下资源:
- Apple 78TP文档:Combine Framework | Apple Developer
- 《Combine: Asynchronous Programming with Swift》— RayWenderlich 出品
- 中文社区教程与实战案例(持续更新中)