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


Swift Result.Publisher values用法及代碼示例

用法一

實例屬性

values

發布者生成的元素,作為異步序列。

聲明

var values: AsyncPublisher<Self> { get }
FailureNever 時可用。

詳述

此屬性提供了一個 AsyncPublisher ,它允許您使用 Swift async - await 語法來接收發布者的元素。因為 AsyncPublisher 符合 AsyncSequence ,所以您使用 for - await - in 循環迭代其元素,而不是附加訂閱者。

以下示例顯示如何使用 values 屬性異步接收元素。該示例改編自 Publisher/filter(_:) 運算符文檔中的代碼片段,它過濾序列以僅發出偶數整數。此示例將 Subscribers/Sink 訂閱者替換為 for - await - in 循環,該循環遍曆 values 屬性提供的 AsyncPublisher


let numbers: [Int] = [1, 2, 3, 4, 5]
let filtered = numbers.publisher
    .filter { $0 % 2 == 0 }


for await number in filtered.values
{
    print("\(number)", terminator: " ")
}

可用版本

iOS 15.0+, iPadOS 15.0+, macOS 12.0+, Mac Catalyst 15.0+, tvOS 15.0+, watchOS 8.0+

用法二

實例屬性

values

發布者產生的元素,作為一個拋出的異步序列。

聲明

var values: AsyncThrowingPublisher<Self> { get }

詳述

此屬性提供了一個 AsyncThrowingPublisher ,它允許您使用 Swift async - await 語法來接收發布者的元素。因為 AsyncPublisher 符合 AsyncSequence ,所以您使用 for - await - in 循環迭代其元素,而不是附加訂閱者。如果發布者因錯誤而終止,等待的調用者將收到錯誤作為 throw

以下示例顯示如何使用 values 屬性異步接收元素。該示例改編了 Publisher/tryFilter(_:) 運算符文檔中的代碼片段,它過濾序列以僅發出偶數整數,並以 0 上的錯誤終止。此示例將 Subscribers/Sink 訂閱者替換為 for - await - in 循環,該循環遍曆 values 屬性提供的 AsyncPublisher。使用這種方法,先前在接收器訂閱者的 Subscribers/Sink/receiveCompletion 閉包中提供的錯誤處理改為在 catch 塊中進行。


let numbers: [Int] = [1, 2, 3, 4, 0, 5]
let filterPublisher = numbers.publisher
    .tryFilter{
        if $0 == 0 {
            throw ZeroError()
        } else {
            return $0 % 2 == 0
        }
    }


do {
    for try await number in filterPublisher.values {
        print ("\(number)", terminator: " ")
    }
} catch {
    print ("\(error)")
}

可用版本

iOS 15.0+, iPadOS 15.0+, macOS 12.0+, Mac Catalyst 15.0+, tvOS 15.0+, watchOS 8.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Result.Publisher values。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。