用法一
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()
可用版本
用法二
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
可用版本
相關用法
- Swift AsyncSequence contains(_:)用法及代碼示例
- Swift AsyncSequence contains(where:)用法及代碼示例
- Swift AsyncSequence dropFirst(_:)用法及代碼示例
- Swift AsyncSequence reduce(_:_:)用法及代碼示例
- Swift AsyncSequence first(where:)用法及代碼示例
- Swift AsyncSequence prefix(_:)用法及代碼示例
- Swift AsyncSequence map(_:)用法及代碼示例
- Swift AsyncSequence allSatisfy(_:)用法及代碼示例
- Swift AsyncSequence min()用法及代碼示例
- Swift AsyncSequence drop(while:)用法及代碼示例
- Swift AsyncSequence max()用法及代碼示例
- Swift AsyncSequence filter(_:)用法及代碼示例
- Swift AsyncSequence flatMap(_:)用法及代碼示例
- Swift AsyncSequence prefix(while:)用法及代碼示例
- Swift AsyncSequence max(by:)用法及代碼示例
- Swift AsyncSequence min(by:)用法及代碼示例
- Swift AsyncSequence用法及代碼示例
- Swift AsyncStream用法及代碼示例
- Swift AsyncStream first(where:)用法及代碼示例
- Swift AsyncStream prefix(_:)用法及代碼示例
- Swift AsyncStream drop(while:)用法及代碼示例
- Swift AsyncStream max(by:)用法及代碼示例
- Swift AsyncStream dropFirst(_:)用法及代碼示例
- Swift AsyncStream reduce(_:_:)用法及代碼示例
- Swift AsyncStream prefix(while:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 AsyncSequence compactMap(_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。