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

map(_:)

Creates an asynchronous sequence that maps the given error-throwing closure over the asynchronous sequence’s elements. ある非同期シーケンスを作成します、それは与えられたエラースロークロージャを非同期シーケンスのもつ要素のすべてにわたってマップします。

Declaration 宣言

func map<Transformed>(_ transform: @escaping (Base.Element) async throws -> Transformed) -> AsyncThrowingMapSequence<AsyncDropWhileSequence<Base>, Transformed>

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 can also throw an error, which ends the transformed sequence. マップを行うクロージャ。transformはこのシーケンスのひとつの要素をそれのパラメータとして受け取り、同じもしくは異なる型の変換された値を返します。transformはまたエラーをスローできます、それは変換されたシーケンスを終わらせます。

Return Value 戻り値

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

Discussion 解説

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

In this example, an asynchronous sequence called Counter produces Int values from 1 to 5. The closure provided to the map(_:) method takes each Int and looks up a corresponding String from a romanNumeralDict dictionary. This means the outer for await in loop iterates over String instances instead of the underlying Int values that Counter produces. Also, the dictionary doesn’t provide a key for 4, and the closure throws an error for any key it can’t look up, so receiving this value from Counter ends the modified sequence with an error. この例において、Counterと呼ばれる非同期シーケンスは、Int値を1から5まで生み出します。map(_:)メソッドに提供されたクロージャは、各Intをとり、そして対応しているStringromanNumeralDict辞書から捜します。これは、外側のfor await inループがStringインスタンスそれらのすべてにわたって反復することを意味します、Counterが生み出す基礎をなすIntそれらではなく。また、辞書は4に対するキーを提供しません、そしてクロージャはそれが見つけることが出来ない何らかのキーに対してエラーをスローします、それでこの値をCounterから受け取ることはこの修正されたシーケンスをエラーで終わらせます。


let romanNumeralDict: [Int : String] =
    [1: "I", 2: "II", 3: "III", 5: "V"]


do {
    let stream = Counter(howHigh: 5)
        .map { (value) throws -> String in
            guard let roman = romanNumeralDict[value] else {
                throw MyError()
            }
            return roman
        }
    for try await numeral in stream {
        print("\(numeral) ", terminator: " ")
    }
} catch {
    print ("Error: \(error)")
}
// Prints: I  II  III  Error: MyError()