迭代器(Iterator)和生成器(Generator)都是Swift中实现自定义迭代功能的两种机制。
迭代器
迭代器需要遵循IteratorProtocol
协议,该协议要求实现next()
方法,每次调用返回序列中的下一个元素:
struct MyIterator: IteratorProtocol {
private var current = 0
mutating func next() -> Int? {
if current >= 10 {
return nil
}
let result = current
current += 1
return result
}
}
可以通过for-in
循环遍历迭代器:
var iterator = MyIterator()
for i in iterator {
print(i)
}
生成器
生成器使用yield
关键字返回每一个值,而不是将值存储在内存中:
func mySimpleGenerator() -> some Generator<Int> {
yield 1
yield 2
yield 3
}
for i in mySimpleGenerator() {
print(i)
}
生成器可以定义更复杂的逻辑,生成无限序列等,非常强大。
懒加载
两者都是延迟生成序列,只在需要下一个元素时计算,实现了懒加载。
综上所述,迭代器和生成器为Swift提供了操作自定义迭代序列的能力,可以按需生成元素,实现强大的惰性运算。充分利用它们可以创建更优化高效的代码。