在用于Apple合并框架的documentation协议的Subject
中,有send(subscription: Subscription)
函数的描述:
此呼叫为
Subject
提供了建立对任何新的上游订阅的需求的机会。
Subject
上有类似的send
函数,它们可以发布Output
值或Void
值,但是目前尚不清楚{{ 1}}类型使用发送给它的订阅或其含义。
Combine目前提供的唯一符合Subject
的两种类型是CurrentValueSubject
和PassthroughSubject
,它们的Subject
实现都没有任何文档。
符合send(subscription: Subscription)
的类型具有“上游订阅”是什么意思?将为Subject
的下游订阅创建一个用于订阅该主题的内容,但是这里的上游订阅的目的是什么?请提供实际示例。
答案 0 :(得分:0)
在CurrentValueSubject
和PassthroughSubject
中,都存在这些对象,以使即时代码具有句柄以与之组合并与发布/异步组合机制进行发布。这样,这些行为就会在发布商处发生,这意味着它们必须服从合并发布商的相当严格的生命周期。
我在general overview of that lifecycle中有一个Using Combine,您可以进行扫描以快速浏览。为了回答您更具体的问题,在订阅者连接并提出请求之前,发布者应不发布任何值。
主题中公开的API为send()
,其一般形式用于将值发送给订阅者(如果已订阅)。
当您使用两种形式的主题时,通常不需要弄乱订阅者的发送,而让常规实例处理所有订阅和响应机制。
因此,实际上,只有在创建自己的符合Subject的对象时才需要实现它-也就是说,您自己实现Subject的实现,而不是基于Apple已经提供的两种变体之一。
该特定方法允许您响应订阅请求,允许您记录和创建表示法(如果需要)来处理订阅附带的需求分配。来自订阅者连接的每个subscription都具有与之相关联的标识,并且内置类对创建订阅者及其subscriptions
进行所有跟踪。
我个人发现,在现有主题之一的基础上构建要容易得多,并将其组合到我需要发布更新的内容中。