B.9.5 for语句

格式1:


for(expression_1;expression_2;expression_3)

programStatement


一旦开始执行循环,就会计算expression_1。然后,求expression_2的值。如果它的值非零,将执行programStatement并对expression_3求职。只要expression_2的值非零,就继续执行programStatement并计算随后的expression_3。因为expression_2每次都在执行programStatement之前计算,所以,如果expression_2的值在首次进入循环时为0,那么可能永远不会执行programStatement。

for循环本地的变量可以在expression_1中声明。这些变量的作用域为for循环的作用域。例如


for(int i=0;i<100;++i)

……


在循环开始时声明整型变量i而且将其初始值设为0。这个变量可以被循环内的任何语句访问,但当循环终止之后,它将不能再被访问。

格式2:


for(var in expression)

programStatement


这种for循环的变体设置了快速枚举。Var是一个变量,可以声明这个变量的类型,让它的作用域与for循环相同。expression是一个表达式,其结果符合NSFastEnumeration协议。通常expression是一个集合,如数组或字典。

每执行一次for循环,根据expression初始求值生成的下一个对象都会被分配给var,并且循环体(由programStatement表示)都会被执行。Expression中的所有对象都枚举后,执行终止。

注意,for循环不能更改集合的内容。如果更改了,则会抛出异常。

数组中的每个元素都会按顺序进行枚举。枚举字典对象会导致每个键都会被枚举,没有特定的顺序。枚举一个组会导致该组的每个成员都会被枚举,没有特定的顺序。