Swift 是一個(gè)類型安全(type safe)的語(yǔ)言。類型安全的語(yǔ)言可以讓你清楚地知道代碼要處理的值的類型。如果你的代碼需要一個(gè)String,你絕對(duì)不可能不小心傳進(jìn)去一個(gè)Int。
由于 Swift 是類型安全的,所以它會(huì)在編譯你的代碼時(shí)進(jìn)行類型檢查(type checks),并把不匹配的類型標(biāo)記為錯(cuò)誤。這可以讓你在開發(fā)的時(shí)候盡早發(fā)現(xiàn)并修復(fù)錯(cuò)誤。
當(dāng)你要處理不同類型的值時(shí),類型檢查可以幫你避免錯(cuò)誤。然而,這并不是說(shuō)你每次聲明常量和變量的時(shí)候都需要顯式指定類型。如果你沒(méi)有顯式指定類型,Swift 會(huì)使用類型推斷(type inference)來(lái)選擇合適的類型。有了類型推斷,編譯器可以在編譯代碼的時(shí)候自動(dòng)推斷出表達(dá)式的類型。原理很簡(jiǎn)單,只要檢查你賦的值即可。
因?yàn)橛蓄愋屯茢?,?C 或者 Objective-C 比起來(lái) Swift 很少需要聲明類型。常量和變量雖然需要明確類型,但是大部分工作并不需要你自己來(lái)完成。
當(dāng)你聲明常量或者變量并賦初值的時(shí)候類型推斷非常有用。當(dāng)你在聲明常量或者變量的時(shí)候賦給它們一個(gè)字面量(literal value 或 literal)即可觸發(fā)類型推斷。(字面量就是會(huì)直接出現(xiàn)在你代碼中的值,比如42和3.14159。)
例如,如果你給一個(gè)新常量賦值42并且沒(méi)有標(biāo)明類型,Swift 可以推斷出常量類型是Int,因?yàn)槟憬o它賦的初始值看起來(lái)像一個(gè)整數(shù):
let meaningOfLife = 42
// meaningOfLife 會(huì)被推測(cè)為 Int 類型
同理,如果你沒(méi)有給浮點(diǎn)字面量標(biāo)明類型,Swift 會(huì)推斷你想要的是Double:
let pi = 3.14159
// pi 會(huì)被推測(cè)為 Double 類型
當(dāng)推斷浮點(diǎn)數(shù)的類型時(shí),Swift 總是會(huì)選擇Double而不是Float。
如果表達(dá)式中同時(shí)出現(xiàn)了整數(shù)和浮點(diǎn)數(shù),會(huì)被推斷為Double類型:
let anotherPi = 3 + 0.14159
// anotherPi 會(huì)被推測(cè)為 Double 類型
原始值3沒(méi)有顯式聲明類型,而表達(dá)式中出現(xiàn)了一個(gè)浮點(diǎn)字面量,所以表達(dá)式會(huì)被推斷為Double類型。