为什么Xcode告诉我最后一个案例永远不会被执行?

时间:2016-01-03 19:34:43

标签: xcode swift switch-statement

关于StackOverflow的另一个问题,我在Swift中输入了一些测试代码,令我惊讶的是它告诉我最后一个案例永远不会被执行(http:),任何人都有任何想法?

.B, .C, .D

3 个答案:

答案 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,案例也将无法执行。