Contents

drop(while:)

Omits elements from the base asynchronous sequence until a given closure returns false, after which it passes through all remaining elements.

Declaration

@preconcurrency func drop(while predicate: @escaping  @Sendable (Self.Element) async -> Bool) -> AsyncDropWhileSequence<Self>

Parameters

  • predicate:

    A 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 from the base sequence until the provided closure returns false.

Discussion

Use drop(while:) to omit elements from an asynchronous sequence until the element received meets a condition you specify.

In this example, an asynchronous sequence called Counter produces Int values from 1 to 10. The drop(while:) method causes the modified sequence to ignore received values until it encounters one that is divisible by 3:

let stream = Counter(howHigh: 10)
    .drop { $0 % 3 != 0 }
for await number in stream {
    print(number, terminator: " ")
}
// Prints "3 4 5 6 7 8 9 10 "

After the predicate returns false, the sequence never executes it again, and from then on the sequence passes through elements from its underlying sequence as-is.