swift生成器

时间:2015-08-13 02:34:49

标签: swift generator

swift repl:

zip([1,2,3],[7,8,9]).generate().next() 
repl.swift:1:22: error: value of type 'Zip2Generator<IndexingGenerator<Array<Int>>, IndexingGenerator<Array<Int>>>' has no member 'next'

但这有效:

var gen = zip([1,2,3],[7,8,9]).generate()
gen.next()

为什么?

1 个答案:

答案 0 :(得分:3)

函数next()会改变调用它的对象,因此必须将该对象分配给var才能使其生效。在将zip([1,2,3],[7,8,9]).generate()分配给var之前,next()是不可变的。

为什么next()会改变对象?因为有一个内部索引变量可以跟踪下一个要显示的值。 @IBOutlet var imageViews: [UIImageView]! 使用该内部索引,然后将其推进(将其变异)以指向下一个项目。