关于 StackOverflow 上的另一个问题,我在 Swift 中输入了一些测试代码,令我惊讶的是它告诉我最后一个案例永远不会被执行(带有 .B, .C, .D
),有人有什么想法吗?
func test(someEnum: EnumType) {
switch someEnum {
case .A:
someMethodSpecificToA()
fallthrough
case .B, .C, .D:
someMethodSpecificToTheseThreeLetters()
fallthrough
case .E:
someMethodSpecificToE()
fallthrough
case .A, .E:
aMethodIShouldCallOnVowels()
case .B, .C, .D:
aMethodIShouldCallOnAllConsonants()
}
}
最佳答案
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()
}
关于xcode - 为什么 Xcode 告诉我最后一个 case 永远不会被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34580757/