实例方法
combine
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
pub1
和 pub2
发出值;当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+
相关用法
- Swift Result.Publisher combineLatest(_:_:)用法及代码示例
- Swift Result.Publisher combineLatest(_:_:_:_:)用法及代码示例
- Swift Result.Publisher combineLatest(_:_:_:)用法及代码示例
- Swift Result.Publisher compactMap(_:)用法及代码示例
- Swift Result.Publisher contains(_:)用法及代码示例
- Swift Result.Publisher collect(_:options:)用法及代码示例
- Swift Result.Publisher collect(_:)用法及代码示例
- Swift Result.Publisher catch(_:)用法及代码示例
- Swift Result.Publisher zip(_:_:_:)用法及代码示例
- Swift Result.Publisher tryLast(where:)用法及代码示例
- Swift Result.Publisher sink(receiveCompletion:receiveValue:)用法及代码示例
- Swift Result.Publisher merge(with:_:_:)用法及代码示例
- Swift Result.Publisher tryCompactMap(_:)用法及代码示例
- Swift Result.Publisher print(_:to:)用法及代码示例
- Swift Result.Publisher sink(receiveValue:)用法及代码示例
- Swift Result.Publisher eraseToAnyPublisher()用法及代码示例
- Swift Result.Publisher setFailureType(to:)用法及代码示例
- Swift Result.Publisher first(where:)用法及代码示例
- Swift Result.Publisher output(at:)用法及代码示例
- Swift Result.Publisher tryCatch(_:)用法及代码示例
- Swift Result.Publisher dropFirst(_:)用法及代码示例
- Swift Result.Publisher merge(with:_:_:_:_:_:_:)用法及代码示例
- Swift Result.Publisher flatMap(maxPublishers:_:)用法及代码示例
- Swift Result.Publisher map(_:_:_:)用法及代码示例
- Swift Result.Publisher drop(while:)用法及代码示例
注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Result.Publisher combineLatest(_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。