かなり初歩的なことだと思いますが、メモ。
問題
switch構文内でローカル変数を使いたい時、こんなふうに記述するとコンパイルエラーになる。
switch (cellNumber) {
case 1:
NSString *viewDataKey = @"Name";
…
…
}
switch構文内で変数を宣言すると、コンパイルエラーになるのは、C言語の特性(C89)を引き継いでいるから、ということなのだろうか?C++(99)であれば、これは許容されるらしい。
回避策
コンパイルエラーを回避するには2通りあって、それはこのようになる。
//switch構文のスコープが開始する前に宣言する
NSString *viewDataKey;
switch (cellNumber) {
case 1:
viewDataKey = @"Name";
…
}
//case内の記述を{}で囲む
switch (cellNumber) {
case 1: {
NSString *viewDataKey = @"Name";
…
}
…
}
ただ、switch構文内で変数を宣言する方式(後者)は、初期化処理を飛び越えてしまう可能性がある点で、とてもこわいものなのだそうだ。