以前我使用以下函数使我的自定义类符合SequenceType协议:
func generate() -> AnyGenerator<UInt32> {
var nextIndex = 0
return anyGenerator {
if (nextIndex > self.scalarArray.count-1) {
return nil
}
return self.scalarArray[nextIndex++]
}
}
这是对这两个问题的可接受答案的类似实现:
但是在Swift 2.2更新后......
&#39; ++&#39;不推荐使用:它将在Swift 3中删除
func generate() -> AnyGenerator<UInt32> {
var nextIndex = 0
return AnyGenerator {
if (nextIndex > self.scalarArray.count-1) {
return nil
}
nextIndex += 1
return self.scalarArray[nextIndex]
}
}
但是这会抛出一个Index超出范围的错误,因为我实际上需要使用预先递增的索引,然后在返回后递增它。
现在如何在Swift中为AnyGenerator工作? (另外,我应该减少而不是递增,因为我联系的其他两个答案是吗?)
答案 0 :(得分:0)
为什么不介绍一个虚拟变量?
func generate() -> AnyGenerator<UInt32> {
var nextIndex = 0
return AnyGenerator {
if (nextIndex > self.scalarArray.count-1) {
return nil
}
let next = self.scalarArray[nextIndex]
nextIndex += 1
return next
}