Fallthrough
落入下一个案例,而不是下一个匹配的案例。这个概念继承自Cswitch
语句,其中每个case
可能被认为是goto
目的地标签,以及switch
语句将执行到第一个匹配的语句。
在C中,switch
语句仅指示执行位置starts块内。为了更加方便,您may使用break
声明跳过其余部分switch
身体,但没有什么强迫你;如果你不这样做,执行会正常继续,就像case
s 不在那儿。例如:
switch (countdown)
{
case 3: puts("3...");
case 2: puts("2...");
case 1: puts("1...");
case 0: puts("0!");
}
With no break
任何地方,如果countdown
是 3,那么你就得到了整个事情(即使countdown
显然是 3,而不是 2、1 或 0)。
当执行从一个案例转到另一个案例而不是退出时switch
范围(例如,具有break
声明),你会得到“fall through”(这就是 Swiftfallthrough
关键字确实如此)。
这在 C 中是相关的,因为您可以在内部使用任意复杂的结构switch
语句,如果需要的话可以重叠案例。这是一个合法的 C 程序:
switch (x)
{
case 0:
if (y == 3)
{
case 1:
puts("hello");
}
else
{
puts("world");
}
case 2:
puts("!");
}
然而,这种用法极其罕见,并且通常很难遵循(快点!如果出现以下情况,可以执行 else 分支吗?x == 1
?)。我还没有测试过,但如果你能用 Swift 做类似的事情,我会感到非常惊讶。
一般来说,在 C 中,跌倒被认为是糟糕的风格,因为通常很难判断跌倒是自愿的还是由于缺失break
陈述。 Swift 解决了这个问题fallthrough
语句,这明确表明您希望执行继续到语句中的下一个情况switch
声明而不是退出switch
scope.
在您的情况下,您不能使用fallthrough来获得您想要的东西,因为fallthrough仅当您需要的执行序列是线性时才有用。您需要跳过无效的代码块,因此您需要使用if-else
序列而不是switch
陈述。