在目标c中切换NSString上的case

时间:2013-09-28 14:00:12

标签: objective-c nsstring switch-statement

我想在NSString中使用case语句 请更改我的代码以更正代码

NSString *day = @"Wed";

switch (day) {
    case @"Sat":
        NSlog(@"Somthing...");
        break;

    case @"Sun":
        NSlog(@"Somthing else...");
        break;  
        .
        .
        .
        .

    default:
        break;
}

2 个答案:

答案 0 :(得分:53)

如果你想要一些比一长串条件更聪明的调度,你可以使用块字典:

NSString *key = @"foo";

void (^selectedCase)() = @{
    @"foo" : ^{
        NSLog(@"foo");
    },
    @"bar" : ^{
        NSLog(@"bar");
    },
    @"baz" : ^{
        NSLog(@"baz");
    },
}[key];

if (selectedCase != nil)
    selectedCase();

如果你有很长的案例清单并经常这样做,那么这可能会有很小的性能优势。你应该缓存字典,然后(不要忘记复制块)。

为了方便和简洁而牺牲易读性这里是一个适合所有内容的版本,并添加了一个默认案例:

((void (^)())@{
    @"foo" : ^{
        NSLog(@"foo");
    },
    @"bar" : ^{
        NSLog(@"bar");
    },
    @"baz" : ^{
        NSLog(@"baz");
    },
}[key] ?: ^{
    NSLog(@"default");
})();

我更喜欢前者。

答案 1 :(得分:2)

Switch语句不适用于NSString,只能使用整数。使用if else

NSString *day = @"Wed";

if([day isEqualToString:@"Sat"]) {
        NSlog(@"Somthing...");
       }
else if([day isEqualToString:@"Sun"]) {
        NSlog(@"Somthing...");
       }
...