Swift for..in和for循环

时间:2015-05-29 00:39:30

标签: swift for-loop

为什么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" {

}

2 个答案:

答案 0 :(得分:3)

Swift documentation很好地总结了它:

  

index是一个常量,其值在循环的每次迭代开始时自动设置。因此,它不必在使用之前声明。它只是通过包含在循环声明中而隐式声明,而不需要let声明关键字。

换句话说,for / in循环中使用的变量是常量;因此,确实没有必要要求使用let

&#34;传统&#34;中使用的变量。但是,for循环可以是变量或常量,因此需要varlet。 (通常,它们是变量,但是可以在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是可变的