
簡單來說, switch 後頭接一小括弧,小括弧內為一常數運算式 (expression) ,計算出常數值若與其後 case 的位標相符,就會執行該 case 的陳述。 case 的位標也可以是常數運算式,不過通常直接用常數值。
如下列程式,假設有一位元編碼儲存在陣列 (array) data[] 之中,程式累計 0 與 1 各自出現的數目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #import <Foundation/Foundation.h> int main ( int argc, const char * argv[]) { NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc ] init ]; int data[] = { 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , 1 }; int oneCount = 0 ; int zeroCount = 0 ; int i; for (i = 0 ; i <= 1 6 ; i++) { switch (data[i]) { case 0 : zeroCount++; break; case 1 : oneCount++; break; } } NSLog( @"資料中有%d個0,%d個1....\n" , zeroCount, oneCount); [pool drain ]; return 0 ; } /* 《程式語言教學誌》的範例程式 檔名:switch01.m 功能:Objective-c 程式範例 作者:張凱慶 時間:西元 2013 年 4 月 */ |
編譯執行,結果如下

第 12 行
12 | switch (data[i]) { |
data[i] 會取得該陣列的第 i 個元素值,此為常數運算式。
由於情況只有 0 與 1 ,因此上列程式只用 0 與 1 兩個位標。另外第 15 及第 19 行都有
15 | break; |
關鍵字 break 是用來暫時中斷程式的執行,放在迴圈 (loop) 內遇到 break 就會跳出迴圈,而在 switch 裡頭的位標後面則是可以不讓程式繼續往下檢查其他的位標,因為檢查到相符的位標,程式即可暫停,若是沒有用 break ,程式會持續執行到右大括弧 } ,也就是 switch 陳述結束的地方,這樣容易增加額外的程式執行時間。
以下程式計算字串中母音字母出現的次數,若非母音字母則用 default 位標執行另外的計算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #import <Foundation/Foundation.h> int main ( int argc, const char * argv[]) { NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc ] init ]; char saying[] = " Never put off till tomorrow what you can do today."; int aV, eV, iV, oV, uV, other, i; aV = eV = iV = oV = uV = other = i = 0 ; while (saying[i] != '\ 0 ') { switch (saying[i]) { case 'A': case 'a': aV++; break; case 'E': case 'e': eV++; break; case 'I': case 'i': iV++; break; case 'O': case 'o': oV++; break; case 'U': case 'u': uV++; break; default : other++; break; } i++; } NSLog( @"\na: %d, e: %d, i: %d, o: %d, u: %d, other: %d" , aV, eV, iV, oV, uV, other); return 0 ; } /* 《程式語言教學誌》的範例程式 檔名:switchvowel.m 功能:Objective-c 程式範例 作者:張凱慶 時間:西元 2013 年 4 月 */ |
編譯執行,結果如下

default 位標下的 break 其實可有可無,但習慣上每個 case 都有給一個 break ,所以 default 後加上 break 只是相對看起來整齊而已。
各 case 的位標或 default 的出現順序並沒有強制規定,但習慣上, default 會放在最後面。
中英文術語對照 | |
---|---|
控制結構 | control structure |
關鍵字 | keyword |
陳述 | statement |
運算式 | expression |
陣列 | array |
迴圈 | loop |
您可以繼續參考
控制結構
型態轉換
相關目錄
Objective-C 快速導覽
Objective-C 教材
首頁
參考資料
Programming with Objective-C: About Objective-C
Programming with Objective-C: Working with Objects
沒有留言:
張貼留言