将AnyGenerator与Swift 2.2+一起使用("用于"循环支持自定义类)

时间:2016-04-09 02:47:35

标签: ios swift iteration

以前我使用以下函数使我的自定义类符合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工作? (另外,我应该减少而不是递增,因为我联系的其他两个答案是吗?)

1 个答案:

答案 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
}