この記事はXcode7.2を使ってます。
Objective-Cのswitch構文には文字列の比較ができない。。
例えばこんな感じ
NSString *test = @"aiueo";
switch (test) {
case @"aiueo":
NSLog(@"ok?");
break;
default:
break;
}
2行目のswitch (test)でStatement requires expression of integer type.
とエラー
プリプロセッサディレクティブを使ってSwitchを自作する
# define CASE(str) if ([__c__ isEqualToString:(str)])
# define SWITCH(c) for (NSString *__c__=(c);__c__;__c__ = nil)
# define DEFAULT
実態はSWITCHという名のfor構文でループさせ、CASEという名のif構文で文字列の比較を
行う。
実際コードを書いてみると
# define CASE(str) if ([__c__ isEqualToString:(str)])
# define SWITCH(c) for (NSString *__c__=(c);__c__;__c__ = nil)
# define DEFAULT
NSString *str = @"JK";
SWITCH (str) {
CASE (@"ABCD") {
NSLog(@"TEST_1");
break;
}
CASE (@"EFJH") {
NSLog(@"TEST_2");
break;
}
CASE (@"JK") {
NSLog(@"TEST_3");
break;
}
DEFAULT {
break;
}
}
"TEST_3"が出力される。
エラーにならずにうまくできた!
Xcodeのスニペット登録するといいかも