内容摘录自原文Using Combine(中文版)
1.What(什么是Combine)
Combine 是 Apple 用来实现函数响应式编程的库, 类似于 RxSwift。 RxSwift 是 ReactiveX 对 Swift 语言的实现。 Combine 使用了许多可以在其他语言和库中找到的相同的函数响应式概念,并将 Swift 的静态类型特性应用其中。
函数响应式编程
函数响应式编程, 也称为数据流编程, 建立在 函数式编程 的概念上。 其中函数式编程适用于元素列表,函数响应式编程应用于元素流。 函数式编程中的各种函数,例如
map,filter, 和reduce也有可以应用于流的类似函数。 除了函数式编程原本的能力外,函数响应式编程还包括用于分割和合并流的函数。 像函数式编程一样,你可以对在流中的数据进行转换。处理事件流的流程、时序、发生的错误以及协调系统如何响应所有这些事件是函数响应式编程的核心。
2.When(什么时候使用Combine)
当你想要设置对各种输入做出反应时,Combine 最合适, 用户界面也非常适合这种模式。
-
用户界面交互,SwiftUI
-
异步操作序列,如:一系列的网路请求、编解码等
-
用于操作错误处理,如:网络受限,改用低分辨率的图像管道
-
Apple官方使用:
- RealityKit 也具有可用于对事件做出反应的发布者;
- Foundation 包括作为发布者的 NotificationCenter、URLSession 和 Timer。
- 任何异步 API 都可以 与 Combine 一起使用。 例如,使用 Vision 框架中的一些 API,利用 Combine 组合流入和流出的数据。
3.学习整理(结构脑图)
publisher 和 subscriber,在 Swift 中被描述为协议
-
- Publisher and Subscriber
- 操作符
- Subjects
- Back Pressure (提供了Cancellable)
- 指订阅者应该控制它一次获得多少信息以及需要处理多少信息。 这带来了高效的数据操作,并且通过流处理的数据量是可控和可取消的。
-
订阅-发布声明周期
4.使用示例
5.学习推荐
Apple资源(虽已过时,可了解应用场景)
Combine 的在线文档 可以在 developer.apple.com/documentati… 找到。 Apple 的开发者文档托管在 developer.apple.com/documentati… 。
WWDC 2019 内容
Apple 在其开发者大会中提供了视频、幻灯片和一些示例代码。 关于 Combine 的详细信息主要来自 WWDC 2019。
其中一些介绍并深入讲解了 Combine:
许多其他 WWDC19 会议提到了 Combine:
- Modern Swift API Design
- Data Flow Through SwiftUI
- Introducing Combine and Advances in Foundation
- Advances in Networking, Part 1
- Building Collaborative AR Experiences
- Expanding the Sensory Experience with Core Haptics
其他资源
除了 Apple 的文档之外,还有许多其他在线资源,你可以在其中找到有关 Combine 运作方式的问题、答案、讨论和说明。
- Swift 论坛(托管于 swift 开源项目)有一个 combine tag 有许多有趣讨论。虽然 Combine 框架 不是 开源的,但在这些论坛中有它的一些实现和细节的讨论。
- Stackoverflow 也有大量(并且还在不断增加)的 Combine 相关问答。