objective-cのswitchは整数値しか判定できない
objective-cにおけるswitch
の条件式は、integral(整数値. intなど)しか受け付けません。なので、以下の様にNSString
のインスタンスを条件式に渡すと、構文エラーになります。
NSString *country = @"Japan";
switch(country){
case @"Japan":
break;
case @"USA":
break;
case @"Russia":
break;
default:
break;
}
ではどうするかと言うと、enum
を使って実装しました。
typedef NS_ENUM(int, Country){
USA,
Japan,
Russia
};
NSString *country = @"Japan";
NSArray *countries = @[@"USA", @"Japan", @"Russia"];
int index = [countries indexOfObject: country];
switch(index){
case USA:
// do something
break;
case Japan:
break;
case Russia:
break:
default:
break;
}
enum
とNSArray
の各Itemの対応を常に保つのが大変ですね。
NSDictionary
のkeyとvalueで一緒に保管するのも良いと思います。
isEqual:
で比較してくれると一番楽なのですが…
参考
Stack Overflow: Can Objective-C switch on NSString?http://stackoverflow.com/questions/8161737/can-objective-c-switch-on-nsstring