关于StackOverflow的另一个问题,我在Swift中输入了一些测试代码,令我惊讶的是它告诉我最后一个案例永远不会被执行(http:
),任何人都有任何想法?
.B, .C, .D
答案 0 :(得分:6)
fallthrough
关键字表示"在不执行任何其他检查的情况下进入下一个案例。遇到.A
时,您的代码将执行这四种方法:
someMethodSpecificToA()
someMethodSpecificToTheseThreeLetters()
someMethodSpecificToE()
aMethodIShouldCallOnVowels()
因为它会进入case .A
,并且保持"经过"一直到aMethodIShouldCallOnVowels()
。
由于fallthrough
和.A
上没有.E
,因此.B .C .D
上达到switch
案例的第一个实例后,它会继续一直到.A .E
。在这一点上,没有进行额外的切换,并且.B .C .D
已经通过初始跳转进行了探索。
这就是为什么您的方法不起作用的原因:您需要将switch
分成两个单独的方法,或者为.E
和.A
添加一个特殊情况。
switch someEnum {
case .A .E:
switch someEnum {
case .A:
someMethodSpecificToA()
case .E:
someMethodSpecificToE()
}
aMethodIShouldCallOnVowels()
case .B, .C, .D:
someMethodSpecificToTheseThreeLetters()
aMethodIShouldCallOnAllConsonants()
}
答案 1 :(得分:1)
因为你没有从case .A, .E
掉落而且最后一种情况与第二种情况相同,所以它将与第二种情况相匹配。
答案 2 :(得分:0)
简单来说,您无法重复案例。在您的代码段中重复case .B, .C, .D:
。如果你错误地执行case .B, .C, .C
,案例也将无法执行。