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


Swift AsyncSequence flatMap(_:)用法及代碼示例


用法一

實例方法

flatMap(_:)

創建一個異步序列,將調用給定轉換的結果與該序列的每個元素連接起來。

聲明

@preconcurrency func flatMap<SegmentOfResult>(_ transform: @escaping (Self.Element) async -> SegmentOfResult) -> AsyncFlatMapSequence<Self, SegmentOfResult> where SegmentOfResult : AsyncSequence

返回值

一個單一的扁平異步序列,包含 transform 生成的所有異步序列中的所有元素。

參數

transform

映射閉包。 transform 接受此序列的元素作為其參數並返回 AsyncSequence

詳述

當您的轉換為每個元素生成異步序列時,使用此方法接收 single-level 異步序列。

在此示例中,名為 Counter 的異步序列生成從 15Int 值。轉換閉包接受接收到的 Int 並返回一個新的 Counter,它的計數很高。例如,當變換從基本序列接收到 3 時,它會創建一個新的 Counter 來生成值 123flatMap(_:) 方法 “flattens” 將生成的 sequence-of-sequences 轉換為單個 AsyncSequence


let stream = Counter(howHigh: 5)
    .flatMap { Counter(howHigh: $0) }
for await number in stream {
    print("\(number)", terminator: " ")
}
// Prints: 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5

可用版本

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

用法二

實例方法

flatMap(_:)

創建一個異步序列,該序列將調用給定 error-throwing 轉換的結果與該序列的每個元素連接起來。

聲明

@preconcurrency func flatMap<SegmentOfResult>(_ transform: @escaping (Self.Element) async throws -> SegmentOfResult) -> AsyncThrowingFlatMapSequence<Self, SegmentOfResult> where SegmentOfResult : AsyncSequence

返回值

一個單一的扁平異步序列,包含 transform 生成的所有異步序列中的所有元素。當從基本序列的最後一個元素創建的最後一個序列結束時,或者當transform 引發錯誤時,序列結束。

參數

transform

error-throwing 映射閉包。 transform 接受此序列的元素作為其參數並返回 AsyncSequence 。如果transform 引發錯誤,則序列結束。

詳述

當您的轉換為每個元素生成異步序列時,使用此方法接收 single-level 異步序列。

在此示例中,名為 Counter 的異步序列生成從 15Int 值。轉換閉包接受接收到的 Int 並返回一個新的 Counter,它的計數很高。例如,當變換從基本序列接收到 3 時,它會創建一個新的 Counter 來生成值 123flatMap(_:) 方法 “flattens” 將生成的 sequence-of-sequences 轉換為單個 AsyncSequence 。但是,當閉包接收到 4 時,它會引發錯誤,從而終止序列。


do {
    let stream = Counter(howHigh: 5)
        .flatMap { (value) -> Counter in
            if value == 4 {
                throw MyError()
            }
            return Counter(howHigh: value)
        }
    for try await number in stream {
        print ("\(number)", terminator: " ")
    }
} catch {
    print(error)
}
// Prints: 1 1 2 1 2 3 MyError()

可用版本

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

相關用法


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