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


Swift AsyncThrowingStream init(unfolding:)用法及代码示例


初始化器

init(unfolding:)

从给定的 element-producing 闭包构造一个异步抛出流。

声明

init(unfolding produce: @escaping () async throws -> Element?) where Failure == Error

参数

produce

为流异步生成元素的闭包。

详述

当您有一个可以为流生成元素的异步函数并且不想手动调用延续时,请使用此便捷初始化程序。这个初始化器“unfolds” 你的闭包变成了一个full-blown 异步流。创建的流会自动处理对AsyncSequence 协议的遵守情况。要以错误终止流,请从闭包中抛出错误。

以下示例显示了使用此初始化程序创建的 AsyncThrowingStream,该初始化程序在 one-second 间隔上生成随机数。如果随机数可被 5 整除且没有余数,则流将抛出 MyRandomNumberError


let stream = AsyncThrowingStream<Int, Error> {
        await Task.sleep(1 * 1_000_000_000)
        let random = Int.random(in: 1...10)
        if (random % 5 == 0) {
            throw MyRandomNumberError()
        }
        return random
    }


// Call point:
do {
    for try await random in stream {
        print ("\(random)")
    }
} catch {
    print ("\(error)")
}

可用版本

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

相关用法


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