首页 > 解决方案 > ReactiveSwift 缓冲管道

问题描述

如何在ReactiveSwift中实现缓冲重播主题

我已经查看了replayLazily(upTo:)operator ofSignalProducer以及类型的pipe()函数Signal,但是我看不到创建与 Rx 等效的东西的直接方法ReplaySubject

这也带来了以下问题:

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

  2. replayLazily(upTo:)类型中缺少运算符Signal。我想这还不错,因为您可以SignalProducerSignal. 但是为什么没有Signal相同的运算符呢?

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

任何帮助将非常感激。

标签: iosswiftreactive-swift

解决方案


Signal文档说:

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

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

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

从 2016 年开始有一个很好的讨论,希望replayLazily能澄清运营商背后的想法以及为什么它绝对不能成为Signal.


推荐阅读