C in ObjC系列(2) 流程控制
C in ObjC系列為Objective-C中保留C語言語法的系列介紹。
流程控制
程式中可以去判斷條件成立時要利用程式做什麼樣的動作,這就稱為流程控制,下面介紹的語法中,會利用不同語法來呈現相同輸出結果。
if
if 的功能可以有很多種配合方式,當你只需要條件成立時執行程式內容時:
if (<#condition#>) { <#statements#> }
除了條件成立外,條件不成立時也要執行程式內容時可以增加:
if (<#condition#>) { <#statements#> } else { <#statements#> }
多種條件成立時與不成立時各別執行程式內容時:
if (<#condition#>) { <#statements#> } else if (<#expression#>) { <#statements#> } else { <#statements#> }
多種條件判斷時,依照下面格式增加條件判斷:
if (<#condition#>) { <#statements#> } else if (<#expression#>) { <#statements#> } else if (<#expression#>) { <#statements#> : : } else if (<#expression#>) { <#statements#> } else { <#statements#> }
- <#condition#> 條件判斷式
- <#statements#> 執行程式內容
程式範例:
//-----------start----------- for (NSInteger m = 4; m > 0; m --) { if (m == 1) { NSLog(@"1 m = 1"); } else if (m == 2) { NSLog(@"2 m = 2"); } else { NSLog(@"Other m = %ld",m); } } //------------end------------
輸出結果:
2014-08-17 16:18:33.318 LoopDemo[65795:303] Other m = 4 2014-08-17 16:18:33.318 LoopDemo[65795:303] Other m = 3 2014-08-17 16:18:33.318 LoopDemo[65795:303] 2 m = 2 2014-08-17 16:18:33.318 LoopDemo[65795:303] 1 m = 1
switch
switch (<#expression#>) { case <#constant#>: <#statements#> break; default: break; }
- <#expression#> 傳入變數的名稱
- <#constant#> 依據傳入變數值內容成立時,執行下面的程式內容
- <#statements#> 執行程式內容
- default:條件都未成立時,會執行default這個預設的程式內容
每個case條件成立時,執行程式內容結束後必需要增加break
來中斷switch/case
:
//-----------start----------- for (NSInteger m = 4; m > 0; m --) { switch (m) { case 1: NSLog(@"1 m = 1"); break; case 2: NSLog(@"2 m = 2"); break; default: NSLog(@"Other m = %ld",m); break; } } //------------end------------
輸出結果:
2014-08-17 16:41:57.648 LoopDemo[66124:303] Other m = 4 2014-08-17 16:41:57.649 LoopDemo[66124:303] Other m = 3 2014-08-17 16:41:57.649 LoopDemo[66124:303] 2 m = 2 2014-08-17 16:41:57.650 LoopDemo[66124:303] 1 m = 1
未加入break
時程式會繼續執行下一個內容:
//-----------start----------- for (NSInteger m = 4; m > 0; m --) { switch (m) { case 1: NSLog(@"1 m = 1"); case 2: NSLog(@"2 m = 2"); break; default: NSLog(@"Other m = %ld",m); break; } } //------------end------------
輸出結果:
2014-08-17 16:34:29.942 LoopDemo[66010:303] Other m = 4 2014-08-17 16:34:29.943 LoopDemo[66010:303] Other m = 3 2014-08-17 16:34:29.943 LoopDemo[66010:303] 2 m = 2 2014-08-17 16:34:29.943 LoopDemo[66010:303] 1 m = 1 2014-08-17 16:34:29.943 LoopDemo[66010:303] 2 m = 2
m = 1時,執行程式內容完成後未加入break
,所以會繼鑟執行case 2:
後的內容,然而輸出結果會多印出2 m = 2
。
有先前未加入break
的方式,所以您要多個判斷都執行程式內容的相同結果,那可以寫成這樣:
//-----------start----------- for (NSInteger m = 4; m > 0; m --) { switch (m) { case 1: case 2: NSLog(@"1,2 m = 1 or 2"); break; default: NSLog(@"Other m = %ld",m); break; } } //------------end------------
輸出結果:
2014-08-17 16:38:16.872 LoopDemo[66067:303] Other m = 4 2014-08-17 16:38:16.873 LoopDemo[66067:303] Other m = 3 2014-08-17 16:38:16.873 LoopDemo[66067:303] 1,2 m = 1 or 2 2014-08-17 16:38:16.874 LoopDemo[66067:303] 1,2 m = 1 or 2