Switch语句中案例的顺序是否会影响Swift中的执行速度?

Switch语句中案例的顺序是否会影响Swift中的执行速度?,swift,Swift,假设一个案例在统计上比其他案例更可能发生,那么如果将该“案例”放在Switch语句的第一位,执行会更快吗 逻辑上应该是这样的,但我已经运行了一些基准测试,我看不出有什么不同。 开关/案例是利用“案例”比其他案例更可能的事实的最佳方式吗?这是一个非常简单的测试: struct MyInteger { let value: Int } func ~=(a: Int, b: MyInteger) -> Bool { println("Evaluating pattern \(a

假设一个案例在统计上比其他案例更可能发生,那么如果将该“案例”放在Switch语句的第一位,执行会更快吗

逻辑上应该是这样的,但我已经运行了一些基准测试,我看不出有什么不同。
开关/案例是利用“案例”比其他案例更可能的事实的最佳方式吗?

这是一个非常简单的测试:

struct MyInteger {
    let value: Int
}

func ~=(a: Int, b: MyInteger) -> Bool {
    println("Evaluating pattern \(a)")

    return (a == b.value)
}

for i in 0...3 {
    let number = MyInteger(value: i)

    switch (number) {
        case 0:
            println("Case 0")
        case 1:
            println("Case 1")
        case 2:
            println("Case 2")
        default:
            println("Default branch")
    }
}
输出是

Evaluating pattern 0
Case 0
Evaluating pattern 0
Evaluating pattern 1
Case 1
Evaluating pattern 0
Evaluating pattern 1
Evaluating pattern 2
Case 2
Evaluating pattern 0
Evaluating pattern 1
Evaluating pattern 2
Default branch
因此,
case
语句的顺序很重要,只有当我们找到一个符合
true
的语句时,才会对它们进行计算

这也是为什么
default
语句必须始终是最后一个语句的原因(这在Java或C等语言中是不强制的,
switch
只是一个跳转表)


每个
案例
都是对模式匹配函数的调用
~=
(或其中的多个)。

这证明案例是按照编写顺序进行评估的:

func testing(a : Int)->Int{
    println(a)
    return a
}

let x = 2

switch x {
    case testing(1) :
        println("one")
    case testing(2) :
        println("two")
    case testing(3) :
        println("three")
    case testing(4) :
        println("four")
    default:
        println("Default")
}
这张照片是:

1
2
two

如果您想评估以下情况,那么如果您可以添加测试代码(甚至只是switch语句),那么可以使用关键字
fallthrough

,这可能有助于人们讨论它。