是否可以在switch
语句中使用NSString
?
还是只使用if
/ else if
更好
发布于 2010-11-19 19:29:46
switch语句需要整数常量,所以这里不能使用NSString,所以看起来你必须使用if/else选项。
还有一点是,您必须使用isEqualToString:或NSStrings :方法比较比较,因此即使允许在切换情况下使用指针值,您也不能使用它们
发布于 2012-10-04 00:34:38
我在我的应用程序中使用这些宏。
#define CASE(str) if ([__s__ isEqualToString:(str)])
#define SWITCH(s) for (NSString *__s__ = (s); ; )
#define DEFAULT
SWITCH (string) {
CASE (@"AAA") {
break;
}
CASE (@"BBB") {
break;
}
CASE (@"CCC") {
break;
}
DEFAULT {
break;
}
}
发布于 2012-02-13 18:22:50
Switch语句不适用于NSString:它只适用于int。
If/Else语句的代码太多,而且通常不是最优的。
最佳解决方案是使用由NSString (或其他对象)可能性索引的NSDictionary。然后直接访问正确的值/函数。
示例1,当您想测试@"A“或@"B”并执行methodA或methodB时:
NSDictionary *action = @{@"A" : [NSValue valueWithPointer:@selector(methodA)],
@"B" : [NSValue valueWithPointer:@selector(methodB)],
};
[self performSelector:[action[stringToTest] pointerValue]];
示例2,当您想测试@"A“或@"B”并执行blockA或blockB时:
NSDictionary *action = @{@"A" : ^{ NSLog (@"Block A"); },
@"B" : ^{ NSLog (@"Block B"); },
};
((void (^)())action[stringToTest])();
https://stackoverflow.com/questions/4224495
复制相似问题