當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift Result.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大神的英文原創作品 Result.Publisher combineLatest(_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。