C in ObjC系列(1) 回圈
C in ObjC系列为Objective-C中保留C语言语法的系列介绍。
回圈
回圈是每个程式语言都具备的功能,Objective-C沿用C语言的回圈语法,下面的范例使用多种回圈的语法来完成相同的结果,会印出变数内容4、3、2、1依序递减。
while {}
while (<#condition#>) { <#statements#> }
- 先判断 <#condition#> 符合条件就执行回圈内程式
- <#statements#> 程式内容
//-----------start----------- NSInteger m = 4; while (m > 0) { NSLog(@"%ld",m); m = m -1; } //------------end------------
m > 0 执行回圈。
输出结果:
2014-08-17 14:48:20.496 LoopDemo[64502:303] 4 2014-08-17 14:48:20.496 LoopDemo[64502:303] 3 2014-08-17 14:48:20.496 LoopDemo[64502:303] 2 2014-08-17 14:48:20.497 LoopDemo[64502:303] 1
do {} while
do { <#statements#> } while (<#condition#>);
- 先执行
do ... while
的程式后再判断<#condition#> 符合条件就继续执行回圈内程式 - <#statements#> 程式内容
//-----------start----------- NSInteger m = 4; do { NSLog(@"%ld",m); m = m -1; } while (m > 0); //------------end------------
m > 0 执行回圈。
输出结果:
2014-08-17 14:51:02.062 LoopDemo[64562:303] 4 2014-08-17 14:51:02.062 LoopDemo[64562:303] 3 2014-08-17 14:51:02.063 LoopDemo[64562:303] 2 2014-08-17 14:51:02.063 LoopDemo[64562:303] 1
for {}
for (<#initialization#>; <#condition#>; <#increment#>) { <#statements#> }
- <#initialization#> 初始值,可以在此定义新的变数或是用已知的
- <#condition#> 条件成立时继续执行回圈内程式
- <#increment#> 初始值变数变化算式
- <#statements#> 程式内容
//-----------start----------- for (NSInteger m = 4; m > 0; m = m - 1) { NSLog(@"%ld",m); } //------------end------------
m 变数初始值为4,每次执行回圈后将m减1,如果 m > 0的话继续执行回圈
2014-08-17 14:58:27.218 LoopDemo[64742:303] 4 2014-08-17 14:58:27.218 LoopDemo[64742:303] 3 2014-08-17 14:58:27.219 LoopDemo[64742:303] 2 2014-08-17 14:58:27.219 LoopDemo[64742:303] 1
for in {}
for (<#type *object#> in <#collection#>) { <#statements#> }
- <#collection#> 列举(寻访)的物件
- <#type *object#> 列举(寻访)中取得的物件型态
- <#statements#> 程式内容
这虽然在原先C的定义中未有此功能,但Objective-C将for增加在物件上使用会有列举(寻访)的功能,它会依照物件的连结关系将物件一一列举(寻访),直到物件无法再列举(寻访)为止,范例会将要印出的数值变数存入阵列中,再使用for将阵列列举出来。
//-----------start----------- NSArray *m = @[@4,@3,@2,@1]; for (NSNumber *mm in m) { NSLog(@"%ld",[mm integerValue]); } //------------end------------
输出结果:
2014-08-17 15:13:26.162 LoopDemo[64922:303] 4 2014-08-17 15:13:26.162 LoopDemo[64922:303] 3 2014-08-17 15:13:26.162 LoopDemo[64922:303] 2 2014-08-17 15:13:26.163 LoopDemo[64922:303] 1
此语法在许多物件语法中都会提供该功能,像:Java、Python…等。
break、continue
有时,执行回圈时,你会因为某些条件成立后想要确即的离开回圈,或是条件成立后,想要跳离次此的回圈,继续下一个回圈,要达成这二种功能,程式语言提供了continue
与break
:
- continue 跳离次此回圈不执行后面的程式内容,但不离开回圈,直接下一次回圈
- break 中断回圈不执行后面的程式内容,并且离开回圈
//-----------start----------- NSArray *m = @[@4,@3,@2,@1]; for (NSNumber *mm in m) { if ([mm integerValue] == 3) { NSLog(@"continue"); continue; } if ([mm integerValue] == 2) { NSLog(@"break"); break; } NSLog(@"%ld",[mm integerValue]); } //------------end------------
当mm = 3
时印出continue
后不执行后面的程式内容,直接执行下一个回圈判断式,并且mm = 2
时,印出break
后跳离此回圈并且不执行后面的程式内容,所以程式中只会印出数值4
。
输出结果:
2014-08-17 15:33:18.190 LoopDemo[65172:303] 4 2014-08-17 15:33:18.190 LoopDemo[65172:303] continue 2014-08-17 15:33:18.191 LoopDemo[65172:303] break