阅读article关于快速编译时间。我感兴趣的是为什么使用2个以上的序列合并操作符会显着增加编译时间。
实施例: 编译时间3.65秒
func fn() -> Int {
let a: Int? = nil
let b: Int? = nil
let c: Int? = nil
return 999 + (a ?? 0) + (b ?? 0) + (c ?? 0)
}
编译时间0.09秒
func fn() -> Int {
let a: Int? = nil
let b: Int? = nil
let c: Int? = nil
var res: Int = 999
if let a = a {
res += a
}
if let b = b {
res += b
}
if let c = c {
res += c
}
return res
}
答案 0 :(得分:4)
我几乎可以肯定这与类型推断有关。在解释所有这些+
和??
运算符时,编译器在幕后做了很多工作来推断这些参数的类型。单独的+
运算符有大约30个重载,当你将它们中的几个链接在一起时,你使编译器的工作比你想象的要复杂得多。