如果表达式返回true / false,为什么我不能在一个案例中使用它?

时间:2013-06-21 21:46:33

标签: ios objective-c switch-statement

我已经用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语句以这种方式工作?

2 个答案:

答案 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;
}