我已经用if / else重写了这个,但它困扰着我,希望有人可以教育我。我有以下开关声明:
switch( true )
{
case [request.URL.absoluteString isEqualToString:secondMapUrl]:
return NO;
break;
case [request.URL.absoluteString isEqualToString:mapUrl]:
[self openMapViewController];
return NO;
default:
return YES;
}
哪个失败并且“表达式不是整数常量表达式” - 但这些情况评估为可以使用的真/假,即。 case true:
- 有没有办法让switch语句以这种方式工作?
答案 0 :(得分:3)
编译器需要能够编译结果,其中方法不返回常量(它们返回动态结果,可能是YES或可能为NO)。
在这种情况下,“开关”是不合适的。
在关键字上做一个“switch( true )
”(它本身就是一个常量,意味着编译器支持的某些语言中的某些东西),我甚至认为它不是有效的。如果您确实有一个名为“true
”的变量,则应将其更改为具有更合理的变量名称。
答案 1 :(得分:0)
你不能将这样的字符串与开关比较,你只能做常量,如int / bool / char。只有两条线就像我要做的那样,如果没有其他线路,或者如果你有很多线条的某种形式的数组和循环检查。即使你的开关是可能的,switch(true)也必须改为request.URL.absoluteString。在单词切换之后的变量是在单词case示例之后被检查的事物
switch (my_Int) {
case 0: do something; break;
case 1: do something else; break;
}