Instance Method インスタンスメソッド

drop(while:)

Omits elements from the base sequence until a given error-throwing closure returns false, after which it passes through all remaining elements. 要素を基底シーケンスから、ある与えられたエラースロークロージャがfalseを返すまで省きます、それの後それは全ての残りの要素をずっと渡します。

Declaration 宣言

func drop(while predicate: @escaping (Self.Element) async throws -> Bool) -> AsyncThrowingDropWhileSequence<Self>

Parameters パラメータ

predicate

An error-throwing closure that takes an element as a parameter and returns a Boolean value indicating whether to drop the element from the modified sequence. あるエラースロークロージャ、それはある要素をパラメータとして取り、その要素をこの修正後のシーケンスから抜かすことになるかどうかを指し示すブール値を返すものです。

Return Value 戻り値

An asynchronous sequence that skips over values until the provided closure returns false or throws an error. ある非同期シーケンス、それは値それらを、この提供されたクロージャがfalseを返すかエラーをスローするまで飛び越えるものです。

Discussion 解説

Use drop(while:) to omit elements from an asynchronous sequence until the element received meets a condition you specify. If the closure you provide throws an error, the sequence produces no elements and throws the error instead. drop(while:)を使うことで要素を非同期シーケンスから、その受け取った要素があなたが指定する条件に合うまで省いてください。あなたが提供するクロージャがエラーをスローするならば、シーケンスは要素を全く生み出しません、そして代わりにエラーをスローします。

In this example, an asynchronous sequence called Counter produces Int values from 1 to 10. The predicate passed to the drop(while:) method throws an error if it encounters an even number, and otherwise returns true while it receives elements less than 5. Because the predicate throws when it receives 2 from the base sequence, this example throws without ever printing anything. この例において、Counterと呼ばれる非同期シーケンスはInt値を1から10まで生み出します。drop(while:)メソッドに渡される述部は、それが偶数に出会うならばエラーをスローします、そしてそうでなければtrueを、それが5より少ない要素を受けとる間ずっと返します。述部はそれが2を基底シーケンスから受け取る時にスローすることから、この例は決して何かを印字することなくスローします。


do {
    let stream =  Counter(howHigh: 10)
        .drop {
            if $0 % 2 == 0 {
                throw EvenError()
            }
            return $0 < 5
        }
    for try await number in stream {
        print("\(number) ")
    }
} catch {
    print ("\(error)")
}
// Prints: EvenError()

After the predicate returns false, the sequence never executes it again, and from then on the sequence passes through elements from its underlying sequence. A predicate that throws an error also never executes again. 述部がfalseを返した後、シーケンスはそれを決して再び遂行しません、そしてその時からシーケンスは要素それらをそれの基礎をなすシーケンスからずっと渡します。エラーをスローする述部は、同様に決して再び遂行しません。

See Also 参照

Excluding Elements 要素を除外する