我很难理解为什么在实施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
?
答案 0 :(得分:1)
let
,这意味着之后的值可能不会改变,这就是这里的情况。
如果您在任何时候修改next
,则必须使用var
关键字将其声明为变量。
答案 1 :(得分:0)
它是while循环中的可选绑定。 next()返回一个可选项。你在那里丢失了一些代码,但它只是说“虽然接下来仍然返回一个非零值,做这个东西”。您不会在while循环中更改x,因此不需要var声明。我甚至不确定你是否可以在那种情况下使用var。令他们感到困惑的是,他们接下来也将变量命名为。你可以说
while let nextValue = next(){...}