当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Optional.Publisher combineLatest(_:)用法及代码示例


实例方法

combineLatest(_:)

订阅其他发布者并在接收到任一发布者的输出时发布一个元组。

声明

func combineLatest<P>(_ other: P) -> Publishers.CombineLatest<Self, P> where P : Publisher, Self.Failure == P.Failure

返回值

一个从这个和另一个发布者接收和组合元素的发布者。

参数

other

另一个与这个结合的发布者。

详述

当您希望下游订阅者在其中任何一个发布值时从多个发布者接收最新元素的元组时,请使用 Publisher/combineLatest(_:)。要对来自多个发布者的元素进行配对,请改用 Publisher/zip(_:)。要仅接收来自多个发布者而不是元组的最新元素,请使用 Publisher/merge(with:)-7qt71

合并的发布者将所有请求传递给all 上游发布者。但是,它仍然遵循仅向下游发送请求量的demand-fulfilling 规则。如果需求不是 Subscribers/Demand/unlimited ,它会从上游发布者那里删除值。它通过为每个上游使用 1 的缓冲区大小来实现这一点,并在每个缓冲区中保存最新的值。

在此示例中,PassthroughSubject pub1pub2 发出值;当Publisher/combineLatest(_:) 接收来自任一上游发布者的输入时,它将来自每个发布者的最新值组合成一个元组并发布它。


let pub1 = PassthroughSubject<Int, Never>()
let pub2 = PassthroughSubject<Int, Never>()


cancellable = pub1
    .combineLatest(pub2)
    .sink { print("Result: \($0).") }


pub1.send(1)
pub1.send(2)
pub2.send(2)
pub1.send(3)
pub1.send(45)
pub2.send(22)


// Prints:
//    Result: (2, 2).    // pub1 latest = 2, pub2 latest = 2
//    Result: (3, 2).    // pub1 latest = 3, pub2 latest = 2
//    Result: (45, 2).   // pub1 latest = 45, pub2 latest = 2
//    Result: (45, 22).  // pub1 latest = 45, pub2 latest = 22

当所有上游发布者完成时,此发布者完成。如果上游发布者从不发布值,则此发布者永远不会完成。

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional.Publisher combineLatest(_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。