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
    发布者可以选择性地发送 completion:receive(completion:)。 完成可以是正常终止,也可以是通过 .failure 完成,可选地传递一个错误类型。 已取消的管道不会发送任何完成事件。

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

2. publisher发布者

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

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

当订阅者发出请求时,许多发布者会立即提供数据。 在某些情况下,发布者可能有一个单独的机制,使其能够在订阅后返回数据。 这是由协议 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

相关推荐
樱花树下的数学喵2 小时前
手写简易 STL string|C++ 字符串底层实现
开发语言·c++
jimy13 小时前
C++ 报错的 qualifiers 的意思
开发语言·c++
不积跬步无以至千里mmbb264 小时前
rust_analysis
开发语言·后端·rust
暴力求解5 小时前
C++ ---继承(二)
开发语言·c++·算法
陈飞EXCEL5 小时前
北京杰飞 IT 旗下妙码生花少儿Python编程上线两大学习系统
开发语言·python·学习
代龙涛6 小时前
WordPress Query 查询机制详解(WP_Query)
开发语言·后端·php·wordpress
znsoft6 小时前
MaClaw(码卡龙)技术拆解:一个 Go + React 的可自进化智能体平台
开发语言·react.js·golang
凉茶钱7 小时前
红黑树:用“颜色”换“平衡”,set 与 map 的底层发动机
开发语言·c++·红黑树
高冷小鱼殿下8 小时前
内部类Lambda与枚举
java·开发语言
shelly聊外贸8 小时前
WhatsApp 聊天记录如何导出为 CSV?使用 Python 进行数据分析
开发语言·python·数据分析