NSStringとswitch

NSStringを比較して条件分岐させる場合、
普通にif-elseを使えばいいわけですが、
switchっぽい書き方になるようなマクロってこんな感じでいいかしら?
まずは、確認のためにif-elseを使うと次みたいな感じですね。

#define ISSAMESTRINGS(STR,ING) [STR isEqualToString:ING]
if ( ISSAMESTRINGS(foo,bar) ) {
    fuga
}
else if ( ISSAMESTRINGS(foo,hoge) ){
    fugafuga
}
else {
    hogefuga
}

これをマクロ使ってswitchっぽい感じにしてみます。
コードは下に記載。
しかし、あくまでもswitch『っぽい』使い方。
もっとかっこいい方法を思いつく頭が欲しい。
テストはまだしてません(笑)
switchStringを宣言しているところが気になります。
まぁ、同じスコープ内に同じ名前のものを宣言しないようにすればいいのですが、
何かそゆの嫌いです。

#define SWITCH(VAR)  \
NSString *switchString = [NSString stringWithString:VAR];\
if ( 0 ) 
#define CASE(CONSTANT) }else if ([switchString isEqualToString:CONSTANT]) {
#define DEFAULT }else{

/**
 * NSString *str; //何かいれとく
 */
SWITCH(str) {
CASE(@"ST")
// 何かする
CASE(@"RI")
// 何かする
CASE(@"NG")
// 何かする
DEFAULT
// 何かする
}

switchStringのスコープが気になるので、ちょっと改変。
しかし、SWITCHより上では使えない。
。。。switchStringをメチャクチャな名前にすればよくね?

/*
 SWITCH(VAR) \   =>   SWITCH(VAR) {\
#define ENDCASE }   を 追加する
*/
#define SWITCH(VAR)  {\
NSString *switchString = [NSString stringWithString:VAR];\
if ( 0 ) 
#define CASE(CONSTANT) }else if ([switchString isEqualToString:CONSTANT]) {
#define DEFAULT }else{
#define ENDCASE }


//NSString *switchString; // SWITCHよりも上では使えない

SWITCH(str) {
CASE(@"ST")
// 何かする
CASE(@"RI")
// 何かする
CASE(@"NG")
// 何かする
DEFAULT
// 何かする
ENDCASE // ENDCASEじゃなくて普通に"}"をいれてもいいかもね。
}

NSString *switchString; // 使える

最初考えたやつ。実際にswitchを使う。caseだけマクロにする。

#define CASE(OBJ) case [OBJ indexOfObject]
// NSArray に分岐させたい文字を入れる
NSArray *strings = [NSArray arrayWithObjects:@"st",@"ri",@"ng",nil];
int i;
for (i=0; i<[strings count]; i++)
    if ([str isEqualToString:[strings objectAtIndex:i]]) break;
switch(i){
CASE(@"st"):
    break;
CASE(@"ri"):
    break;
CASE(@"ng"):
    break;
default:
    break;
}