當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift AsyncStream init(unfolding:onCancel:)用法及代碼示例


初始化器

init(unfolding:onCancel:)

從給定的 element-producing 閉包構造一個異步流,並帶有一個可選的閉包來處理取消。

聲明

init(
    unfolding produce: @escaping () async -> Element?,
    onCancel: (() -> Void)? = nil
)

參數

produce

為流異步生成元素的閉包。

onCancel

取消流任務時執行的閉包。

詳述

當您有一個可以為流生成元素的異步函數並且不想手動調用延續時,請使用此便捷初始化程序。這個初始化器“unfolds” 你的閉包變成了一個異步流。創建的流自動處理對 AsyncSequence 協議的一致性,包括終止(通過取消或從閉包返回 nil 以完成迭代)。

以下示例顯示了使用此初始化程序創建的 AsyncStream,該初始化程序在 one-second 間隔上生成隨機數。此示例使用 Swift 多尾隨閉包語法,它省略了 unfolding 參數標簽。


let stream = AsyncStream<Int> {
        await Task.sleep(1 * 1_000_000_000)
        return Int.random(in: 1...10)
    }
    onCancel: { @Sendable () in print ("Canceled.") }
)


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

可用版本

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

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 AsyncStream init(unfolding:onCancel:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。