自定义异步序列:构建自己的 AsyncSequence 与迭代器
深入剖析 Swift 的 AsyncSequence 协议,教你如何从头构建一个能异步生成无限斐波那契数列或分页网络数据的自定义迭代器。 · 难度:入门 · +10XP
自定义异步序列:构建自己的 AsyncSequence 与迭代器
大多数教程只教你使用现有的 AsyncStream,但本课将深入 AsyncSequence 与 AsyncIteratorProtocol 底层。你将学习如何创建一个能够按需暂停/恢复、支持取消的异步序列,例如一个无限生成随机颜色值并模拟网络延迟的迭代器。通过实现 next() 方法并处理 CancellationError,你将掌握响应式数据流的底层机制。
struct ColorGenerator: AsyncSequence {
typealias Element = String
func makeAsyncIterator() -> AsyncIterator {
return AsyncIterator()
}
struct AsyncIterator: AsyncIteratorProtocol {
func next() async throws -> String? {
try await Task.sleep(nanoseconds: 1_000_000_000)
let colors = ["red","green","blue","yellow","purple"]
return colors.randomElement()
}
}
}