rx-swift - 在什么情况下可以使用 zip 和 combineLatest?RxSwift
问题描述
我不知道在什么情况下使用 zip 以及在什么情况下使用 combineLatest。有人能帮我吗?
解决方案
zip
当您想要组合两个具有共同来源的 Observable 并且您希望等待来自该来源的所有更新之前它发出一个值时,需要该运算符。combineLatest
运算符用于所有其他情况。
我建议您将combineLatest
其用作默认值,zip
如果您知道自己需要它,请使用它。
如果组合的 observables 都是单数,那么这两个运算符是相同的。事实上,如果你使用的Single
类型,zip
是唯一可用的操作符。
else 的主要用途zip
是当您重新订阅另一个正在组合的 observable 所依赖的 observable 时。将其粘贴到正确配置的 Playground 中:
import RxSwift
import Foundation
func exampleZip(a: Observable<Int>) -> Observable<(Int, String)> {
let b = a.map { "\($0)" }
return Observable.zip(a, b)
}
func exampleCombineLatest(a: Observable<Int>) -> Observable<(Int, String)> {
let b = a.map { "\($0)" }
return Observable.combineLatest(a, b)
}
exampleZip(a: Observable.from([1, 2, 3]))
.subscribe(onNext: { print("zip", $0) })
exampleCombineLatest(a: Observable.from([1, 2, 3]))
.subscribe(onNext: { print("combineLatest", $0) })
这是您将获得的输出:
zip (1, "1")
zip (2, "2")
zip (3, "3")
combineLatest (1, "1")
combineLatest (2, "1")
combineLatest (2, "2")
combineLatest (3, "2")
combineLatest (3, "3")
看到不同?
推荐阅读
- sql - 在 PL/pgsql 中使用基于标志的不同列构建查询
- php - 查找 301 重定向的来源
- tensorflow-serving - CPU AVX AVX2 的 TensorFlow Serving 编译失败
- python - 用字符串列表中的相应值替换字符串
- firebase - google 登录后无法获取 Google auth 标头(空值检查运算符用于空值)
- django - 如何用芹菜运行爬虫
- database - 如何使用部分值存储 TIMESTAMPTZ
- latex - 有什么方法可以自动将句点移动到引号内?(csquotes 似乎不起作用)
- python - 不同的 URL 格式使用 Python 的 requests.get 从相同的 API 返回不同的数据类型
- chrome-web-store - 查看发布到 Chrome 网上应用店的以前版本的扩展程序?