vrw*_*wim 2 xcode switch-statement 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()
}
}
Run Code Online (Sandbox Code Playgroud)
fallthrough关键字意味着"在不执行任何额外检查的情况下进入下一个案例..A遇到以下情况时,您的代码将执行以下四种方法:
someMethodSpecificToA()
someMethodSpecificToTheseThreeLetters()
someMethodSpecificToE()
aMethodIShouldCallOnVowels()
Run Code Online (Sandbox Code Playgroud)
因为它会进入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()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1365 次 |
| 最近记录: |