rx-swift - 在publishedSubject 上使用.startWith 和在publishedSubject 上使用.onNext 之间的区别
问题描述
是否有任何理由使用 startWith 在主题上发出事件
let publishedSubject1 = PublishedSubject<Void>()
publishedSubject1
.startWith(Void())
.subscribe()
.dispose(by: bag)
与仅使用 .onNext 相比
let publishedSubject2 = PublishedSubject<Void>()
publisedSubject2
.subscribe()
.dispose(by: bag)
publishedSubject2.onNext(Void())
这只是那些 Rx 技巧之一,只是以不同的风格方式做同样的事情,就像 .map 用于通过在 map 运算符中移动订阅来隐藏嵌套订阅一样?我在这里查看了代码:https ://github.com/ReactiveX/RxSwift/blob/master/RxSwift/Observables/StartWith.swift这似乎是另一个技巧。是否有使用 .startWith 而不是 .onNext 的功能性原因?
解决方案
[主题] 是 Rx 世界的“可变变量”,在大多数情况下您不需要它们。通常使用 Create 或其他运算符的解决方案允许您只连接延续而不添加额外的状态。
——埃里克·梅杰
使用更具声明性的解决方案使您有机会根本不使用主题。换句话说,使用 Subject 并手动调用onNext
与仅调用带有参数的函数并没有太大区别,因此,如果您坚持使用 Subjects,即使您不必这样做,那为什么还要使用 Rx 呢?
推荐阅读
- python - Python:如何选择表中一行的值(存储在向量中)?
- html - 打印 Perl CSS 和 HTML
- mysql - Oracle DBlink 创建以从 MySql 获取数据
- shell - 通过powershell将打印机添加到打印服务器
- html - html文件输入只选择一个文件
- hangfire - 一次性使用hangfire
- c# - C# 将两个字符串列表与一个模式相交
- python-3.x - 如何在 Python 中匹配日期和时间
- android - 使用 jitpack 构建的库中的错误:无法解析 ':app@debug/compileClasspath' 的依赖关系
- xcode - 如何在 appStore 连接中更新我的应用信息?