“上游订阅”对于“合并主题”类型意味着什么?

时间:2019-11-24 14:12:26

标签: swift reactive-programming combine

在用于Apple合并框架的documentation协议的Subject中,有send(subscription: Subscription)函数的描述:

  

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

Subject上有类似的send函数,它们可以发布Output值或Void值,但是目前尚不清楚{{ 1}}类型使用发送给它的订阅或其含义。

Combine目前提供的唯一符合Subject的两种类型是CurrentValueSubjectPassthroughSubject,它们的Subject实现都没有任何文档。

符合send(subscription: Subscription)的类型具有“上游订阅”是什么意思?将为Subject的下游订阅创建一个用于订阅该主题的内容,但是这里的上游订阅的目的是什么?请提供实际示例。

1 个答案:

答案 0 :(得分:0)

CurrentValueSubjectPassthroughSubject中,都存在这些对象,以使即时代码具有句柄以与之组合并与发布/异步组合机制进行发布。这样,这些行为就会在发布商处发生,这意味着它们必须服从合并发布商的相当严格的生命周期。

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

主题中公开的API为send(),其一般形式用于将值发送给订阅者(如果已订阅)。 当您使用两种形式的主题时,通常不需要弄乱订阅者的发送,而让常规实例处理所有订阅和响应机制。

因此,实际上,只有在创建自己的符合Subject的对象时才需要实现它-也就是说,您自己实现Subject的实现,而不是基于Apple已经提供的两种变体之一。

该特定方法允许您响应订阅请求,允许您记录和创建表示法(如果需要)来处理订阅附带的需求分配。来自订阅者连接的每个subscription都具有与之相关联的标识,并且内置类对创建订阅者及其subscriptions进行所有跟踪。

我个人发现,在现有主题之一的基础上构建要容易得多,并将其组合到我需要发布更新的内容中。