切换语句优化(快速)

que*_*ful 1 optimization switch-statement swift

在swift switch语句中,条件是一次调用还是针对每种情况调用?哪个会更快?

switch foo(param) {
case 0:
    NSLog(0)
default:
    NSLog("default")
}
Run Code Online (Sandbox Code Playgroud)

要么

let myNumber = foo(param)    

switch myNumber {
case 0:
    NSLog(0)
default:
    NSLog("default")
}
Run Code Online (Sandbox Code Playgroud)

Gab*_*lla 5

switch 仅计算一次其参数。

正如Martin在评论中建议的那样,此示例证明了这一点。

func foo(name: String) -> Int {
  println(name)
  return countElements(name)
}

switch foo("hello") {
  case 0: println(0)
  case 1: println(1)
  default: println("default")
}
Run Code Online (Sandbox Code Playgroud)

输出

hello
default
Run Code Online (Sandbox Code Playgroud)

如果要针对每种情况进行评估,您会期望

hello
hello
default
Run Code Online (Sandbox Code Playgroud)

代替