参见英文答案 >
Using an NSString in a switch statement9个
我想用NSString使用case语句
请更改代码以更正代码 @H_301_4@NSString *day = @"Wed"; switch (day) { case @"Sat": NSlog(@"Somthing..."); break; case @"Sun": NSlog(@"Somthing else..."); break; . . . . default: break; }
我想用NSString使用case语句
请更改代码以更正代码 @H_301_4@NSString *day = @"Wed"; switch (day) { case @"Sat": NSlog(@"Somthing..."); break; case @"Sun": NSlog(@"Somthing else..."); break; . . . . default: break; }
解决方法
如果你想要一些稍微更智能的调度比一个长的条件列表,你可以使用块的字典:
@H_301_4@NSString *key = @"foo";
void (^selectedCase)() = @{
@"foo" : ^{
NSLog(@"foo");
},@"bar" : ^{
NSLog(@"bar");
},@"baz" : ^{
NSLog(@"baz");
},}[key];
if (selectedCase != nil)
selectedCase();
如果您有很长的案例列表,并且经常执行此操作,则可能会有一个很小的性能优势.您应该缓存字典,然后(不要忘记复制块).
为了方便和简洁而牺牲易读性,这里是一个适合所有内容到单一语句的版本,并添加了默认情况:
@H_301_4@((void (^)())@{ @"foo" : ^{ NSLog(@"foo"); },}[key] ?: ^{ NSLog(@"default"); })();我更喜欢前者.