Generic Instance Method 総称体インスタンスメソッド

compactMap(_:)

Creates an asynchronous sequence that maps the given closure over the asynchronous sequence’s elements, omitting results that don’t return a value. ある非同期シーケンスを作成します、それは与えられたクロージャを非同期シーケンスのもつ要素のすべてにわたってマップします、値を返さない結果を省きます。

Declaration 宣言

func compactMap<ElementOfResult>(_ transform: @escaping (Element) async -> ElementOfResult?) -> AsyncCompactMapSequence<AsyncThrowingStream<Element, Failure>, ElementOfResult>

Parameters パラメータ

transform

A mapping closure. transform accepts an element of this sequence as its parameter and returns a transformed value of the same or of a different type. マップを行うクロージャ。transformはこのシーケンスのひとつの要素をそれのパラメータとして受け取り、同じもしくは異なる型の変換された値を返します。

Return Value 戻り値

An asynchronous sequence that contains, in order, the non-nil elements produced by the transform closure. ある非同期シーケンス、それはtransformクロージャによって生み出された非nil要素それらを、順番に含みます。

Discussion 解説

Use the compactMap(_:) method to transform every element received from a base asynchronous sequence, while also discarding any nil results from the closure. Typically, you use this to transform from one type of element to another. compactMap(_:)メソッドを使うことで、基底非同期シーケンスから受け取ったあらゆる要素を変換してください、そして一方でまたあらゆるnil結果をクロージャから廃棄して。概して、あなたはこれを使ってある型の要素から別のものへと変換します。

In this example, an asynchronous sequence called Counter produces Int values from 1 to 5. The closure provided to the compactMap(_:) method takes each Int and looks up a corresponding String from a romanNumeralDict dictionary. Because there is no key for 4, the closure returns nil in this case, which compactMap(_:) omits from the transformed asynchronous sequence. この例において、Counterと呼ばれる非同期シーケンスは、Int値を1から5まで生み出します。compactMap(_:)メソッドに提供されたクロージャは、各Intをとり、そして対応しているStringromanNumeralDict辞書から捜します。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

See Also 参照

Transforming a Sequence シーケンスを変形する