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


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


实例方法

zip(_:)

组合来自另一个发布者的元素并将元素对作为元组传递。

声明

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

返回值

从上游发布者发出元素对作为元组的发布者。

参数

other

另一个发布者。

详述

使用Publisher/zip(_:) 组合来自两个发布者的最新元素,并向下游发出一个元组。返回的发布者等待两个发布者都发出事件,然后将来自每个发布者的最旧的未使用事件作为元组一起传递给订阅者。

就像一件衣服上的拉链或拉链将一排排牙齿拉在一起以连接两侧,Publisher/zip(_:) 通过链接来自每一侧的元素对来组合来自两个不同发布者的流。

在此示例中,numbersletters 是发出值的 PassthroughSubject;一旦 Publisher/zip(_:) 从每个接收到一个值,它就会将该对作为一个元组发布给下游订阅者。然后它等待下一对值。


 let numbersPub = PassthroughSubject<Int, Never>()
 let lettersPub = PassthroughSubject<String, Never>()


 cancellable = numbersPub
     .zip(lettersPub)
     .sink { print("\($0)") }
 numbersPub.send(1)    // numbersPub: 1      lettersPub:        zip output: <none>
 numbersPub.send(2)    // numbersPub: 1,2    lettersPub:        zip output: <none>
 letters.send("A")     // numbers: 1,2       letters:"A"        zip output: <none>
 numbers.send(3)       // numbers: 1,2,3     letters:           zip output: (1,"A")
 letters.send("B")     // numbers: 1,2,3     letters: "B"       zip output: (2,"B")


 // Prints:
 //  (1, "A")
 //  (2, "B")

如果上游发布者成功完成或失败并出现错误,则压缩发布者也会这样做。

可用版本

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

相关用法


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