Swift Combine 发布者publisher的生命周期 从入门到精通四

Combine 系列

  1. Swift Combine 从入门到精通一
  2. Swift Combine 发布者订阅者操作者 从入门到精通二
  3. Swift Combine 管道 从入门到精通三

1. 发布者和订阅者的生命周期

订阅者和发布者以明确定义的顺序进行通信,因此使得它们具有从开始到结束的生命周期:

  1. 当调用 .subscribe(_: Subscriber) 时,订阅者被连接到了发布者publisher。
  2. publisher发布者随后调用 receive(subscription: Subscription) 来确认该订阅。
  3. 在订阅被确认后,订阅者请求 N 个值,此时调用 request(_: Demand)
  4. publisher发布者可能随后(当它有值时)发送 N 个或者更少的值,通过调用 receive(_: Input)。 发布者不会发送超过需求量的值。
  5. 订阅确认后的任何时间,订阅者都可能调用 .cancel() 来发送 cancellation
    发布者可以选择性地发送 completionreceive(completion:)。 完成可以是正常终止,也可以是通过 .failure 完成,可选地传递一个错误类型。 已取消的管道不会发送任何完成事件。

在上述图表中包含了一组堆积起来的弹珠图, 这是为了突出 Combine 的弹珠图在管道的整体生命周期中的重点。 通常,图表推断所有的连接配置都已完成并已发送了数据请求。 Combine 的弹珠图的核心是从请求数据到触发任何完成或取消之间的一系列事件。

2. publisher发布者

发布者是数据的提供者。 当订阅者请求数据时, publisher protocol 有严格的返回值类型约定,并有一系列明确的完成信号可能会终止它。

你可以从 JustFuture 开始使用发布者,它们分别作为单一数据源和异步函数来使用。

当订阅者发出请求时,许多发布者会立即提供数据。 在某些情况下,发布者可能有一个单独的机制,使其能够在订阅后返回数据。 这是由协议 ConnectablePublisher 来约定实现的。 遵循 ConnectablePublisher 的发布者将有一个额外的机制,在订阅者发出请求后才启动数据流。 这可能是对发布者单独的调用 .connect() 来完成。 另一种可能是 .autoconnect(),一旦订阅者请求,它将立即启动数据流。

Combine 提供了一些额外的便捷的发布者:

Combine 之外的一些 Apple API 也提供发布者。

  • SwiftUI 使用 @Published@ObservedObject 属性包装,由 Combine 提供,含蓄地创建了一个发布者,用来支持它的声明式 UI 的机制。

Foundation

参考

https://heckj.github.io/swiftui-notes/index_zh-CN.html

代码

https://github.com/heckj/swiftui-notes

相关推荐
potato_may23 分钟前
C语言第3讲:分支和循环(上)—— 程序的“决策”与“重复”之旅
c语言·开发语言
kalvin_y_liu36 分钟前
【MES架构师与C#高级工程师(设备控制方向)两大职业路径的技术】
开发语言·职场和发展·c#·mes
xxxxxxllllllshi40 分钟前
Java 代理模式深度解析:从静态到动态,从原理到实战
java·开发语言·笔记·算法·代理模式
计算机毕业设计指导1 小时前
从零开始构建HIDS主机入侵检测系统:Python Flask全栈开发实战
开发语言·python·flask
步行cgn1 小时前
SqlSessionFactory 的作用
java·开发语言
数据知道1 小时前
Go语言:Go 语言中的命令行参数操作详解
开发语言·后端·golang·go语言
hui函数2 小时前
Python全栈(基础篇)——Day05:后端内容(dict与set+while循环+for循环+实战演示+每日一题)
开发语言·后端·python
小猪绝不放弃.2 小时前
一张图入门 Docker
java·开发语言
可可南木2 小时前
ICT 数字测试原理 8 - -VCL 的测试参数
开发语言·功能测试·测试工具·pcb工艺
哟哟耶耶2 小时前
Starting again-02
开发语言·前端·javascript