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


Swift AsyncMapSequence 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大神的英文原创作品 AsyncMapSequence flatMap(_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。