【问题标题】:What does "upstream subscription" mean for a Combine Subject type?对于组合主题类型,“上游订阅”是什么意思?
【发布时间】:2020-03-19 23:04:29
【问题描述】:

documentation 对于 Apple 的 Combine 框架的 Subject 协议中有 send(subscription: Subscription) 函数的描述:

此电话为Subject 提供了建立对任何新上游订阅的需求的机会。

Subject 上有类似的 send 函数允许发布 Output 值或 Void 值,但仍不清楚 Subject 类型如何使用发送给它的订阅或者那是什么意思。

Combine 目前提供的唯一符合Subject 的两种类型是CurrentValueSubjectPassthroughSubject,它们的send(subscription: Subscription) 实现也没有任何文档。

符合Subject 的类型拥有“上游订阅”是什么意思?将为订阅此主题的内容创建Subject 的下游订阅,但这里上游订阅的目的是什么?如果可能,请提供真实世界的示例。

【问题讨论】:

    标签: swift reactive-programming combine


    【解决方案1】:

    CurrentValueSubjectPassthroughSubject 中,对象的存在是为了允许即时代码有一个句柄来与组合发布者/异步类型的机制进行交互和发布。这样做时,它们在 Publishers 中起作用,这意味着它们必须遵守 Combine 发布者相当严格的生命周期。

    我在Using Combine 中有一个general overview of that lifecycle,您可以扫描它以获得快速概览。为了回答您更具体的问题,发布者应该在订阅者连接并提出需求请求之前发布任何值。

    Subject 中公开的 API 是 send(),其一般形式用于向订阅者发送值(如果订阅者已订阅)。 当您使用任何一种形式的 Subject 时,您通常不需要为订阅者处理发送问题,而是让通用实例处理所有订阅和响应机制。

    所以你真的只需要在你自己的对象符合 Subject 的情况下实现它——也就是说,你自己实现一个 Subject,而不是基于 Apple 已经提供的两种变体之一。

    该特定方法允许您响应订阅请求,允许您记录和创建符号(如果需要)以处理伴随订阅而来的需求分配。来自连接的订阅者的每个subscription 都有一些与之关联的身份,并且内置类在订阅者和他们的subscriptions 创建时进行所有跟踪。

    我个人发现在现有主题之一之上构建要容易得多,将其组合成我需要发布更新的任何内容。

    【讨论】:

    • 谢谢!我认为这解释了一个主题的下游订阅是什么,但是在这种情况下,什么是“上游订阅”呢?
    • “上游”订阅是主体在链中连接时对任何事物的订阅。当您使用主题时,通常不会像您在操作员中看到的那样使用链接订阅,而不是特定订阅,它通常发生在更直接地调用 .send() 以传递数据。尽管如此,作为发布者本身,主题必须能够响应订阅,这是您所询问的方法的核心。
    • 那么上游订阅和下游订阅有什么区别呢?
    • 关于一个主题,很难定义 - 对于 Combine 中的一般“操作员”(同时充当发布者和订阅者的事物): - 上游是您订阅的发布者,以及根据需求请求提供发布的值 - 下游是您发布的订阅者,并且您根据需求请求提供值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2015-02-20
    • 1970-01-01
    • 2021-05-03
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多