Swift iterator和generator使用代码详解

迭代器(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提供了操作自定义迭代序列的能力,可以按需生成元素,实现强大的惰性运算。充分利用它们可以创建更优化高效的代码。