用法一
compactMap(_:)
声明
@preconcurrency func compactMap<ElementOfResult>(_ transform: @escaping (Self.Element) async -> ElementOfResult?) -> AsyncCompactMapSequence<Self, ElementOfResult>
返回值
一个异步序列,按顺序包含由 transform
闭包生成的非 nil
元素。
参数
transform
映射闭包。
transform
接受此序列的元素作为其参数,并返回相同或不同类型的转换值。
详述
使用 compactMap(_:)
方法转换从基本异步序列接收到的每个元素,同时丢弃闭包中的任何 nil
结果。通常,您使用它从一种类型的元素转换为另一种类型的元素。
在此示例中,名为 Counter
的异步序列生成从 1
到 5
的 Int
值。提供给compactMap(_:)
方法的闭包接受每个Int
并从romanNumeralDict
字典中查找相应的String
。因为 4
没有键,所以在这种情况下,闭包返回 nil
,而 compactMap(_:)
从转换的异步序列中省略。
let romanNumeralDict: [Int : String] =
[1: "I", 2: "II", 3: "III", 5: "V"]
let stream = Counter(howHigh: 5)
.compactMap { romanNumeralDict[$0] }
for await numeral in stream {
print("\(numeral) ", terminator: " ")
}
// Prints: I II III V
可用版本
用法二
compactMap(_:)
声明
@preconcurrency func compactMap<ElementOfResult>(_ transform: @escaping (Self.Element) async throws -> ElementOfResult?) -> AsyncThrowingCompactMapSequence<Self, ElementOfResult>
返回值
一个异步序列,按顺序包含由 transform
闭包生成的非 nil
元素。当基本序列结束或transform
引发错误时,序列结束。
参数
transform
error-throwing 映射闭包。
transform
接受此序列的元素作为其参数,并返回相同或不同类型的转换值。如果transform
引发错误,则序列结束。
详述
使用 compactMap(_:)
方法转换从基本异步序列接收到的每个元素,同时丢弃闭包中的任何 nil
结果。通常,您使用它从一种类型的元素转换为另一种类型的元素。
在此示例中,名为 Counter
的异步序列生成从 1
到 5
的 Int
值。提供给compactMap(_:)
方法的闭包接受每个Int
并从romanNumeralDict
字典中查找相应的String
。由于 4
没有键,因此在这种情况下,闭包返回 nil
,而 compactMap(_:)
从转换的异步序列中省略。当值为 5
时,闭包抛出 MyError
,终止序列。
let romanNumeralDict: [Int : String] =
[1: "I", 2: "II", 3: "III", 5: "V"]
do {
let stream = Counter(howHigh: 5)
.compactMap { (value) throws -> String? in
if value == 5 {
throw MyError()
}
return romanNumeralDict[value]
}
for try await numeral in stream {
print("\(numeral) ", terminator: " ")
}
} catch {
print("Error: \(error)")
}
// Prints: I II III Error: MyError()
可用版本
相关用法
- Swift AsyncThrowingFlatMapSequence contains(_:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence contains(where:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence min()用法及代码示例
- Swift AsyncThrowingFlatMapSequence allSatisfy(_:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence first(where:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence reduce(_:_:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence prefix(while:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence dropFirst(_:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence filter(_:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence prefix(_:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence map(_:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence max(by:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence drop(while:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence min(by:)用法及代码示例
- Swift AsyncThrowingFlatMapSequence max()用法及代码示例
- Swift AsyncThrowingFlatMapSequence flatMap(_:)用法及代码示例
- Swift AsyncThrowingFilterSequence drop(while:)用法及代码示例
- Swift AsyncThrowingFilterSequence max(by:)用法及代码示例
- Swift AsyncThrowingFilterSequence reduce(_:_:)用法及代码示例
- Swift AsyncThrowingFilterSequence min(by:)用法及代码示例
- Swift AsyncThrowingFilterSequence map(_:)用法及代码示例
- Swift AsyncThrowingFilterSequence max()用法及代码示例
- Swift AsyncThrowingFilterSequence contains(_:)用法及代码示例
- Swift AsyncThrowingFilterSequence prefix(_:)用法及代码示例
- Swift AsyncThrowingFilterSequence prefix(while:)用法及代码示例
注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 AsyncThrowingFlatMapSequence compactMap(_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。