在啥情况下我可以使用 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的主要内容,如果未能解决你的问题,请参考以下文章

在啥情况下我使用 Json 或 Hibernate?

在啥情况下我应该使用尝试而不是二叉树/哈希表? [复制]

在 Apple Swift 中,在啥情况下我不想要一个隐式展开的可选项?

7zip的lzma和lzma2算法在啥情况下压缩率不一样

在啥情况下为 Qt MinGW 或 MSVC 选择啥编译器?

PyPI 谜题:-(连字符)和 . (点)分别在啥情况下使用?