ios - swift 。 GeneratorOf<T> 生成函数未返回正确的生成器

标签 ios swift generator sequence

我使用 Playground 来玩一些序列和生成器。 所以我创建了返回 GeneratorOf 结构的函数,该结构假设实现 GeneratorType 和 SequenceType。我希望生成会给我一个新的完整生成器,我可以再次遍历它。但我的 countDownGen2 却没有。

我想我误解了一些东西。

这里出了什么问题?以及如何正确使用GeneratorOf?

func countDown(start: Int) -> GeneratorOf<Int>
{
    var i = start
    return GeneratorOf {return i < 0 ? nil : i-- }
}

var countDownGen = countDown(10)

for i in countDownGen
{
    println(i)
}

var countDownGen2 = countDownGen.generate()

for i in countDownGen2
{
    println(i)
}

最佳答案

GeneratorOf<T>.generate() returns a copy of itself ,并且在您的代码中,它的每个副本都共享对一个 i 的相同引用

所以,当你这样做时countDownGen2 = countDownGen.generate()之后countDownGen筋疲力尽,countDownGen2也已经筋疲力尽了。

你应该做的是:

func countDown(start: Int) -> SequenceOf<Int> {
    return SequenceOf { () -> GeneratorOf<Int> in
        var i = start
        return GeneratorOf { return i < 0 ? nil : i-- }
    }
}

let countDownSeq = countDown(10)

for i in countDownSeq {
    println(i)
}

for i in countDownSeq {
    println(i)
}

let countDownSeq2 = countDownSeq

for i in countDownSeq2 {
    println(i)
}

关于ios - swift 。 GeneratorOf<T> 生成函数未返回正确的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30596447/

相关文章:

python - 可变长度 'yield' ?

ios - 在 Mac/iOS 编程中, "Foundation Object"是什么?

ios - 使用 Swift 3 将 iframe 标签(视频)从 html 字符串加载到 Web View 中

ios - PJSIP 编译错误 - 在 Xcode 5.1.1 上找不到库

ios - titleForHeaderInSection 的文本太长

ios - 获取 UITabBarItem 图像的默认未选定 TintColor

python - 重采样,插值矩阵

python - 如何创建调用生成器函数的生成器函数

objective-c - “setText:已弃用”警告

ios - ios 中的 Twitterkit 3.0 'TWTRInvalidInitializationException' 错误