为什么for循环需要var而for..in不允许使用var?
for loop
for var index = 0; index < 10; i++ {
}
for..in loop
for index in "test" {
}
而不是:
for var index in "test" {
}
答案 0 :(得分:3)
Swift documentation很好地总结了它:
index
是一个常量,其值在循环的每次迭代开始时自动设置。因此,它不必在使用之前声明。它只是通过包含在循环声明中而隐式声明,而不需要let声明关键字。
换句话说,for / in循环中使用的变量仅是常量;因此,确实没有必要要求使用let
。
&#34;传统&#34;中使用的变量。但是,for循环可以是变量或常量,因此需要var
或let
。 (通常,它们是变量,但是可以在for循环中使用常量。)它们也可以在for循环之外(即在它之前)声明并仍然在for循环中使用。由于这种灵活性,您需要将其声明为常量或变量。
答案 1 :(得分:2)
编译器将for x in 0..<5
扩展为以下内容:
var g = (0..<5).generate() {
while let x = g.next() {
// Use x in loop body
}
每次循环时,x
都是一个新声明的变量,即在生成器上调用next的下一个结果的值。
现在,while
可以这种方式重写:
while var x = g.next() {
// use x here
}
我想因为这个原因,for...in
并不支持var
语法来声明循环计数器,因此它不会给你错误的印象x是可变的。