使用nil合并运算符的Swift编译时间

时间:2016-05-08 12:45:14

标签: swift compilation

阅读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
}  

1 个答案:

答案 0 :(得分:4)

我几乎可以肯定这与类型推断有关。在解释所有这些+??运算符时,编译器在幕后做了很多工作来推断这些参数的类型。单独的+运算符有大约30个重载,当你将它们中的几个链接在一起时,你使编译器的工作比你想象的要复杂得多。