在Swift中实现可枚举/集合类
我正在尝试实现类(实现SequenceType),它似乎比我预期的要复杂一些。在C#中,我只需要实现在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?>
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
}
}