当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift AsyncSequence drop(while:)用法及代码示例


用法一

实例方法

drop(while:)

忽略基本序列中的元素,直到给定的error-throwing 闭包返回 false,之后它通过所有剩余的元素。

声明

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

返回值

在提供的闭包返回 false 或引发错误之前跳过值的异步序列。

参数

predicate

error-throwing 闭包,将元素作为参数并返回一个布尔值,指示是否从修改后的序列中删除该元素。

详述

使用drop(while:) 从异步序列中省略元素,直到接收到的元素满足您指定的条件。如果您提供的闭包引发错误,则序列不会产生任何元素,而是会引发错误。

在此示例中,名为 Counter 的异步序列生成从 110Int 值。传递给 drop(while:) 方法的谓词在遇到偶数时抛出错误,否则在接收小于 5 的元素时返回 true 。因为谓词在从基本序列接收到 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()

在谓词返回 false 之后,序列不再执行它,从那时起,序列将遍历其基础序列中的元素。抛出错误的谓词也永远不会再次执行。

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

用法二

实例方法

drop(while:)

从基本异步序列中省略元素,直到给定的闭包返回 false,之后它会遍历所有剩余的元素。

声明

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

返回值

一个异步序列,它跳过基本序列中的值,直到提供的闭包返回 false

参数

predicate

一个闭包,它接受一个元素作为参数并返回一个布尔值,指示是否从修改后的序列中删除该元素。

详述

使用drop(while:) 从异步序列中省略元素,直到接收到的元素满足您指定的条件。

在此示例中,名为 Counter 的异步序列生成从 110Int 值。 drop(while:) 方法导致修改后的序列忽略接收到的值,直到遇到可被 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"

在谓词返回 false 之后,序列不再执行它,从那时起,序列按原样传递其底层序列中的元素。

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 AsyncSequence drop(while:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。