Xcode"开关/案例"声明 - 关于休息的警告;

时间:2015-06-29 03:56:50

标签: objective-c xcode switch-statement

当我在Objective-C中使用Xcode时,我经常发生这种情况:

我正在撰写switch / case声明。通常,为了确保语句是分开的,程序员必须确保break;之间有case个。

我经常忘记将break;语句放入,因此设备执行case而不是执行 所需case的设备。然后是case之后。这在物理设备(iPhone 6)和iOS模拟器上的每个模拟设备上都会发生。

以下是失败语句的语法,someInt是一个01的数字:< / p>

switch (someInt)
{
    case 0:
    {
         // some statements to execute if "someInt" is 0
    }
    case 1:
    {
         // some statements to execute if "someInt" is 1
         break;
    }
}

请注意,在case 0:中,没有break;语句。这会导致case 0:执行然后 {{ 1}}执行,而不仅仅执行case 1

我有没有办法在Xcode中放置一个标志,以便在忘记case 0语句时它会发出警告?

我知道很多程序员可能因为这个问题已经困扰了几天,几周。

2 个答案:

答案 0 :(得分:2)

我认为没有编译器警告。这是因为“程序员必须确保案例之间存在break。”不完全正确。程序员必须确保break s,之间有case,如果他希望代码不通过。 (有一些用例可以通过。)

背景是C类似于汇编程序的替代品。在汇编程序中,如果您不想继续,则编写带有条件跳转到特定分支(case)的多选项,并无条件跳出分支(break)。 (顺便说一句:这就是case的原因 - 分支也没有阻止。)

当然,这已经过时了。您只需使用Xcode的自动代码生成或使用if - else if - else级联替换开关。

答案 1 :(得分:1)

这种行为是C语言的隐含部分(它是目标C的基础),尽管通常情况下,你不希望这种情况发生在下一个案例中,无论好坏,这就是方法语言已定义。

另一方面,斯威夫特并不需要明确的休息,因为案件不会失败。

Clang确实定义了一个警告-Wimplicit-fallthrough,它会在您描述的情况下生成警告,但在Xcode 6.3.2附带的Clang中似乎不支持它。我还没有安装Xcode 7来检查该版本是否仍然如此。