实现可枚举/集合类中Swift

标签: Python ios Swift C#
发布时间: 2017/3/4 18:21:23
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图实现的类 (实现序列),和它似乎比我期待的有点复杂。在 C# 中,我只需要执行 IEnumerable 和" yield return "使得它很容易。同样与 python 中 __iter__()yield 。但在 Swift 我不知道为什么它碰巧是过于复杂。 下面是代码

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

当打电话 for-in 它进入无限循环。

如果实现可迭代类中的,正确的方法是什么 swift

解决方法 1:

return里面的发电机不能像 yield 在 Python,C# 和其他语言。它是只是一片平原 return 语句。

相反, Swift 发电机使用可选赚取 — — Some(x) 指示序列中的下一个项目和 None (或 nil ) 信号序列的末尾。

块你传递给 GeneratorOf<Int> 构造函数 (顺便说一句,那里是没有需要使用 Int? ) 将在每一步,称为和应在每次调用它时,产生的下一个值或 nil 当它完成。所以,你可以使用可变变量来跟踪状态︰

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

    return GeneratorOf<Int> {
        if i >= self.list.count { return nil }
        return self.list[i++]
    }
}

或您甚至可以使用你 list 的内置生成器︰

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
    }
}
官方微信
官方QQ群
31647020