ReactiveSwift 缓冲管道

ReactiveSwift buffered pipe

怎么可以buffered replay subject be implemented in ReactiveSwift

我看过 replayLazily(upTo:) operator of SignalProducer, and also the pipe() function of the Signal type, however I can't see a straightforward way of creating something equivalent to Rx ReplaySubject

这也提出了以下问题:

  1. ReactiveSwift 使用 Signal.pipe() 实现 Subject,但是您不能像为 Rx ReplaySubject 那样为管道指定缓冲区。有什么解决方法吗?

  2. replayLazily(upTo:) operator is missing from the Signal type. I guess this is not so bad since you can create a SignalProducer from a Signal。但是为什么Signal没有相同的运算符呢?

有没有人遇到过这个问题?还是我遗漏了什么?

如有任何帮助,我们将不胜感激。

Signal docs 说:

An observer of a Signal will see the exact same sequence of events as all other observers. In other words, events will be sent to all observers at the same time.

这与生产者形成对比,生产者每次启动时都会创建一个新信号,这意味着每个观察者都可能看到不同的事件。

缓冲方案要求每个观察者在订阅时接收缓冲区中的当前值列表,而其他观察者不应在每次添加新观察者时都收到这些值。因此,每个观察者都需要自己的信号,这意味着缓冲机制必须实现为 生产者,它可以为每个订阅者创建一个新信号。

添加 replayLazily 时有一个 good discussion from 2016,希望能阐明运算符背后的想法以及为什么它绝对不能成为 Signal 的一部分。