Swift類型推斷
類型推斷
Swift廣泛的使用類型推斷,從而允許你可以忽略很多變量和表達式的類型或部分類型。比如,對於var x: Int = 0
,你可以完全忽略類型而簡寫成var x = 0
——編譯器會正確的推斷出x
的類型Int
。類似的,當完整的類型可以從上下文推斷出來時,你也可以忽略類型的一部分。比如,如果你寫了let dict: Dictionary = ["A": 1]
,編譯提也能推斷出dict
的類型是Dictionary<String, Int>
。
在上麵的兩個例子中,類型信息從表達式樹(expression tree)的葉子節點傳向根節點。也就是說,var x: Int = 0
中x
的類型首先根據0
的類型進行推斷,然後將該類型信息傳遞到根節點(變量x
)。
在Swift中,類型信息也可以反方向流動——從根節點傳向葉子節點。在下麵的例子中,常量eFloat
上的顯式類型注解(:Float
)導致數字字麵量2.71828
的類型是Float
而非Double
。
let e = 2.71828 // The type of e is inferred to be Double.
let eFloat: Float = 2.71828 // The type of eFloat is Float.
Swift中的類型推斷在單獨的表達式或語句水平上進行。這意味著所有用於推斷類型的信息必須可以從表達式或其某個子表達式的類型檢查中獲取。