带有while循环和放大器的令人困惑的GeneratorType实现让关键字

时间:2016-10-08 21:58:17

标签: swift

我很难理解为什么在实施Fibonacci生成器时我们使用let关键字。

struct FibonacciGenerator: GeneratorType {
typealias Element = Int

var values = (0, 1)

mutating func next() -> Element? {
    self.values = (
        self.values.1,
        self.values.0 + self.values.1
    )
    return self.values.0
    }
}

var generator = FibonacciGenerator()
while let next = generator.next() {
if next > 10 {
    break
}
print(next)
}

为什么我们在let循环中(在下一个语句之前)使用var而不是while

2 个答案:

答案 0 :(得分:1)

在定义常量时应该使用

let,这意味着之后的值可能不会改变,这就是这里的情况。 如果您在任何时候修改next,则必须使用var关键字将其声明为变量。

答案 1 :(得分:0)

它是while循环中的可选绑定。 next()返回一个可选项。你在那里丢失了一些代码,但它只是说“虽然接下来仍然返回一个非零值,做这个东西”。您不会在while循环中更改x,因此不需要var声明。我甚至不确定你是否可以在那种情况下使用var。令他们感到困惑的是,他们接下来也将变量命名为。你可以说

while let nextValue = next(){...}