忘備録

日々の調べ物をまとめる。アウトプットする。基本自分用。

【Objective-C】switch文でexpected expressionエラー

下記のようなコードを書くと。。。

NSInteger value = 0;
switch (value) {
    case 0:
        NSString *str = @“hoge”;
        break;
        
    default:
        break;
}

「expected expression」と怒られちゃいます。
どうやらswitch文のなかで新規に変数を定義する際は, 新たにスコープを用意する必要があるらしい。
なので。。。

NSInteger value = 0;
switch (value) {
    case 0: {
        NSString *str = @“hoge”;
        break;
    }
        
    default:
        break;
}

のようにするとOK。
もしくは。。。

NSInteger value = 0;

NSString *str;
switch (value) {
    case 0:
        str = @“hoge”;
        break;
        
    default:
        break;
}

のように、変数の定義をswitch文の外に出してしまうか。

ちなみに、この記事を書いていて気付いたけど、Objcのswicth文の制御式に文字列は使えない。。。
スコープを用意する必要があったり、文字列を制御式に使えないのはC言語の仕様らしいです。

他の言語でもそうだけどswitch文はトラブルの元だから使わないほうがいいのかな。。

参考

objective-cのswitch文でexpected expressionエラー | 技術者のたまごブログ