12

我想使用带有 NSString 的 case 语句,请将我的代码更改为正确的代码

NSString *day = @"Wed";

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

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

    default:
        break;
}
4

2 回答 2

55

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

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");
})();

我更喜欢前者。

于 2013-09-28T14:17:38.897 回答
2

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

NSString *day = @"Wed";

if([day isEqualToString:@"Sat"]) {
        NSlog(@"Somthing...");
       }
else if([day isEqualToString:@"Sun"]) {
        NSlog(@"Somthing...");
       }
...
于 2013-09-28T14:14:35.817 回答