在目标c中切换NSString上的case

nmo*_*ary 11 objective-c switch-statement nsstring

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

NSString *day = @"Wed";

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

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

    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*uhe 54

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

NSString *key = @"foo";

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

if (selectedCase != nil)
    selectedCase();
Run Code Online (Sandbox Code Playgroud)

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

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

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

我更喜欢前者.

  • 聪明,但极难阅读。诅咒你,块语法!我只是坚持如果/否则。 (2认同)