谁是Xcode Playground发行商的订阅者?



我试图更好地理解组合框架。当然,.sink()将发布者连接到订阅者。在Xcode Playground页面中,谁是订阅者?考虑下面的例子:

PlaygroundPage.current.needsInfiniteExecution = true
var subscriptions: Set<AnyCancellable> = []
Timer.TimerPublisher(every: 1, on: .main, in: .common)
.autoconnect()
.sink { print($0) }    // Who is this sink connecting the timer publisher to?
.store(in: &subscriptions)

我知道发布-订阅链接正在发生,因为发布者确实开始发布了。只是不清楚订阅者是谁。是否有一种方法可以确定地查询订阅者是谁?

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

你的理解是错误的。.sink是一个订阅者——实际上,它创建了一个Sink对象,这是一个订阅者——在本例中,它是订阅者。

一个附加的细微之处是,操作符(如.autoconnect())既是订阅者又是发布者。但是在这个管道的末端只有一个真正的订阅者,它就是Sink。

Sink没有"连接定时器发布器"。任何事情。它本身就是正在打印的对象。

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

相关内容

  • 没有找到相关文章

最新更新