Xcode Playground Publisher 的订阅者到底是谁?

Who exactly is the subscriber of an Xcode Playground Publisher?

我正在努力更好地理解 Combine 框架。 AFAIK,.sink() 将发布者连接到订阅者。在 Xcode Playground 页面中,订阅者到底是谁?考虑以下示例:

PlaygroundPage.current.needsInfiniteExecution = true

var subscriptions: Set<AnyCancellable> = []

Timer.TimerPublisher(every: 1, on: .main, in: .common)
    .autoconnect()
    .sink { print([=11=]) }    // Who is this sink connecting the timer publisher to?
    .store(in: &subscriptions)

我知道 pub-sub link 正在进行,因为发布者确实开始发布了。只是不清楚订户是谁。有没有一种方法可以确定性地查询 Combine 的订阅者是谁?

此外,如果此计时器发布者的订阅者是 playgroundPage 的当前实例,那么为什么我必须使用 store(in:) 来存储订阅?这不是不必要的吗,因为订户不会很快超出范围(直到我停止游乐场)?

你的理解有误。 .sink 是一个订阅者——实际上,它创建了一个 Sink object,这是一个订阅者——在这种情况下,它是 the 订阅者。

一个额外的好处是运营商,例如 .autoconnect(),既是订阅者又是发布者。但是这个管道的最后只有一个真正的订阅者,它就是Sink。

接收器不会“连接计时器发布者”到任何东西。它本身就是正在打印的对象。

.store 命令将 Sink(封装为 AnyCancellable)分配到 subscriptions 集中。请注意,这是一个糟糕的名称:在 Combine 中,订阅与订阅者是非常非常不同的东西。