当我在Objective-C中使用Xcode时,我经常发生这种情况:
我正在撰写switch
/ case
声明。通常,为了确保语句是分开的,程序员必须确保break;
之间有case
个。
我经常忘记将break;
语句放入,因此设备执行case
而不是执行 所需case
的设备。然后是case
之后。这在物理设备(iPhone 6)和iOS模拟器上的每个模拟设备上都会发生。
以下是失败语句的语法,someInt
是一个0
或1
的数字:< / 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
。
case 0
语句时它会发出警告?我知道很多程序员可能因为这个问题已经困扰了几天,几周。
答案 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来检查该版本是否仍然如此。