在Swift中实现可枚举/集合类

在Swift中实现可枚举/集合类,swift,Swift,我正在尝试实现类(实现SequenceType),它似乎比我预期的要复杂一些。在C#中,我只需要实现IEnumerable,“yield-return”使它变得非常简单。python中使用\uu iter\uu()和yield时也是如此。但在斯威夫特,我不知道为什么它会过于复杂。 这是密码 class Nums : SequenceType{ let list = [1,2,3,4,5] func generate() -> GeneratorOf<Int?>

我正在尝试实现类(实现SequenceType),它似乎比我预期的要复杂一些。在C#中,我只需要实现
IEnumerable
,“
yield-return
”使它变得非常简单。python中使用
\uu iter\uu()
yield
时也是如此。但在斯威夫特,我不知道为什么它会过于复杂。 这是密码

class Nums : SequenceType{

    let list = [1,2,3,4,5]

    func generate() -> GeneratorOf<Int?> {

        return GeneratorOf<Int?>{

            for i in self.list{
                return i
            }

            return nil
        }
    }
}
class Nums:SequenceType{
let list=[1,2,3,4,5]
func generate()->GeneratorOf{
返回发生器{
因为我在self.list中{
返回i
}
归零
}
}
}
当我在
中调用它时,它进入无限循环


如果在swift中实现iterable类,正确的方法是什么?

在生成器中返回
与C#、Python和其他语言中的
产生不同。这只是一个普通的
返回
语句

相反,Swift生成器使用可选变量-
Some(x)
表示序列中的下一项,
None
(或
nil
)表示序列结束

传递给
构造函数的
生成器的块(顺便说一句,不需要使用
Int?
)将在每个步骤中调用,并且每次调用时都应生成下一个值,或者在完成时生成
nil
。因此,您可以使用可变变量来跟踪状态:

func generate() -> GeneratorOf<Int>
{
    var i = 0

    return GeneratorOf<Int> {
        if i >= self.list.count { return nil }
        return self.list[i++]
    }
}
func generate() -> GeneratorOf<Int>
{
    var g = self.list.generate()

    return GeneratorOf<Int> {
        return g.next() // not very exciting... we might as well have returned g itself
    }
}