在啥情况下我可以使用 zip 和 combineLatest? RxSwift
Posted
技术标签:
【中文标题】在啥情况下我可以使用 zip 和 combineLatest? RxSwift【英文标题】:In which case can I use zip and combineLatest? RxSwift在什么情况下我可以使用 zip 和 combineLatest? RxSwift 【发布时间】:2021-10-27 03:12:05 【问题描述】:我不知道在什么情况下使用 zip 以及在什么情况下使用 combineLatest。 有人可以帮我吗?
【问题讨论】:
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:zip
运算符是必需的,当您想要组合两个具有共同来源的 Observable 时,您希望等到该来源的所有更新后才发出值。 combineLatest
运算符用于所有其他情况。
我建议您使用combineLatest
作为默认值,如果您知道自己需要它,请使用zip
。
如果被组合的 observable 都是单数,那么这两个运算符是相同的。事实上,如果您使用Single
类型,zip
是唯一可用的运算符。
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")
看到区别了吗?
【讨论】:
非常感谢,但我想知道它在现实生活中的例子中是如何使用的 我不明白你的意思。以上是真实代码,展示了如何使用zip
。
抱歉我的英语不好。我的意思是 zip 用于合并 2 个 RestAPI,目的是等待两个 API 完成,然后合并; combineLatest 适用于检查真假,例如,当用户在用户和密码文本字段中输入足够的字符时,将启用登录按钮。谢谢你的回复^^
这是不正确的。当您等待两个 API 完成时,您可以使用其中一个;两个运算符的工作方式相同。我已经更新了我的答案。
非常感谢,这个信息我找了很多次了^^以上是关于在啥情况下我可以使用 zip 和 combineLatest? RxSwift的主要内容,如果未能解决你的问题,请参考以下文章
在 Apple Swift 中,在啥情况下我不想要一个隐式展开的可选项?