ReactiveSwift缓冲管道

时间:2019-10-30 05:23:27

标签: ios swift reactive-swift

如何在buffered replay subject中实现ReactiveSwift

我研究了SignalProducer的{​​{3}}运算符,以及pipe()类型的Signal函数,但是我看不到创建的直接方法相当于Rx replayLazily(upTo:)

这也带来了以下问题:

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

  2. {li>

    ReplaySubject类型中缺少

  3. replayLazily(upTo:)运算符。我猜这还不错,因为您可以创建一个Signal。但是为什么Signal没有相同的运算符?

以前有人遇到过此问题吗?还是我错过了什么?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

Signal docs说:

  

信号观察者将看到与所有其他观察者完全相同的事件序列。换句话说,事件将同时发送给所有观察者。

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

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

在添加replayLazily时有一个good discussion from 2016,希望可以澄清操作员背后的想法以及为什么它绝对不能成为Signal的一部分。