[iOS] 条件分岐 switch | プログラミング初心者向けObjective-C入門

2013/04/22

今回は条件分岐でもうひとつあるswitch文です。ざっくりいうとif文の書き方を変えたものです。
if文より使用頻度は低いのですが、ifを使うよりもプログラムが読みやすくなる場合があります。

基本形

        NSInteger n = 1;
        switch (n) {
            case 1:
                NSLog(@"n is 1");
                break; //ここのbreakをはずした場合の動作
            case 2:
                NSLog(@"n is 2");
                break;
            default:
                NSLog(@"default");
                break;
        }
        
        //上記はこれを書いた結果と同じ
        if(n == 1){
            NSLog(@"n is 1");
        }else if(n == 2){
            NSLog(@"n is 2");
        }else{
            NSLog(@"default");
        }

switch(条件式)の中の値がcaseの値と一致したところが実行されます。
上のサンプルでnを2,3と変えてみると動作がわかります。
breakをかかない場合はそのまま実行されてしまいます。
上のサンプルで//コメントで書いた部分のbreakをはずした場合の動作を確認してみるとわかります。

他言語では条件式の中に文字列を書いてcaseで一致する文字列をふりわけることが可能なものもあるのですが、Objective-Cというか、C言語ではできないです。
もし、近いことをやりたい場合は、typedef enumを使えば大丈夫です。typedefとenumについては次回に説明します。

case をつなげた場合

case 文のあとに複数のcaseを書くことが可能です。つづけるcaseの個数に特に制限はないようです。
さきほどbreak文を書き忘れた場合の動作を説明しましたが、それを意図的にやる場合ということになります。

        NSInteger n = 1;
        switch (n) {
            case 1:
            case 2:
                NSLog(@"n is 1 or 2");
                break;
            case 3:
                NSLog(@"n is 3");
                break;
            default:
                NSLog(@"default");
                break;
        }
        
        //上記はこれを書いた結果と同じ
        if(n == 1 || n == 2){
            NSLog(@"n is 1 or 2");
        }else if(n == 3){
            NSLog(@"n is 3");
        }else{
            NSLog(@"default");
        }

注意

caseのあとに続く文で変数を宣言するときは、{}中括弧をつける必要があります。

        NSInteger n = 3;
        NSInteger result = 0;
        
        switch (n) {
            case 1:{ //ここの括弧をつけないとエラー
                NSInteger m = 20;
                result = n + m;
                break;
            }//ここの括弧
            case 3:{
                NSInteger l = -13;
                result = n - l;
                break;
            }
            default:
                NSLog(@"default");
                break;
        }
        
        NSLog(@"result %lu", result);

前回の回答例

前回の課題の回答例です。

1) NSInteger n = 24と宣言したあと、ifの条件式をnが0以上にして、そのときに何か文字列を出力しましょう。

        NSInteger n = 24;
        if(n >= 0){
            NSLog(@"n is greater than or equal to 0");
        }

2) NSInteger型の変数mについて、mが0以上24以下なら「はれ」そうでないときは「あめ」と出力するプログラムをかきましょう。このとき、mが -8, 0, 18, 23, 24, 25とそれぞれ代入したときに、目的通りに動作するか確認してください。

        NSInteger m = -8; //ここの値を変える
        if(m >= 0 && m <= 24){
            NSLog(@"はれ");
        }else{
            NSLog(@"あめ");
        }

次回は定数関連をやってみようと思います。

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

LINEスタンプ作りました!
毎日使える。とぼけたウサギ。LINEスタンプ販売中! 毎日使える。とぼけたウサギ

ページトップへ戻る