ios - ReactiveSwift 缓冲管道
问题描述
如何在ReactiveSwift中实现缓冲重播主题?
我已经查看了replayLazily(upTo:)
operator ofSignalProducer
以及类型的pipe()
函数Signal
,但是我看不到创建与 Rx 等效的东西的直接方法ReplaySubject
。
这也带来了以下问题:
ReactiveSwift 实现
Subject
了 withSignal.pipe()
,但是您不能像为 Rx ReplaySubject一样为管道指定缓冲区。有什么解决方法吗?replayLazily(upTo:)
类型中缺少运算符Signal
。我想这还不错,因为您可以SignalProducer
从Signal
. 但是为什么没有Signal
相同的运算符呢?
有没有人遇到过这个问题?还是我错过了什么?
任何帮助将非常感激。
解决方案
Signal
文档说:
Signal 的观察者将看到与所有其他观察者完全相同的事件序列。换句话说,事件将同时发送给所有观察者。
这与生产者不同,生产者每次启动时都会创建一个新信号,这意味着每个观察者都有可能看到不同的事件。
缓冲场景要求每个观察者在订阅时接收缓冲区中的当前值列表,而其他观察者不应在每次添加新观察者时接收这些值。因此,每个观察者都需要自己的信号,这意味着缓冲机制必须实现为可以为每个订阅者创建新信号的生产者。
从 2016 年开始有一个很好的讨论,希望replayLazily
能澄清运营商背后的想法以及为什么它绝对不能成为Signal
.
推荐阅读
- html - 预加载顺序重要吗?
- qt - Qt QML属性绑定和属性改变信号执行顺序
- angular - 如何在 Angular 11 中为数据创建模板上下文
- function - Sympy 函数无法识别有关变量的假设
- string - Groovy 多行字符串保持新行和缩进
- python - 如何使用 if 语句在我的脚本中创建条件?
- python - 使用 **kwargs 看到的 mypy 中的不兼容类型
- mysql - 用基于两列的另一个字段替换 MySQL 中的一个字段
- delphi - Indy TIdIPMCastServer - 没有到主机的路由
- python - 沿张量的一个轴应用不同的函数