1.1 泛型介紹
泛型的概念最早出自C++,Swift的泛型與其設計思路相同,與Java不同。
優缺點
C++與Swift:是編譯時多態技術,編譯器確定類型,運行時不需要計算。
缺點:生成的機器碼二進制包大一些,雖執行快但可能有更多I/O。
Java:是運行時多態,運行時才確定的。
缺點:運行時才能看到。
使用泛型讓代碼更簡潔和安全。減少強制轉換以及其帶來的出錯風險。
let nameInt = [111,222,333]
let nameString = ["Jack","John","Joker"]
func getName<T>(nameList: [T]){
for name in nameList{
print("\(name)")
}
}
getName(nameInt)
getName(nameString)
1.2 類型約束
使用泛型時可以對定義的泛型遵守Hashable協議,Swift中。String、Int、Double等都是遵循Hashable協議的。
Hashable協議是繼承Equatable協議的,在遵循了Equatable協議之后,就可以支持“==”或“!=”比較。
1.3 泛型和Any的區別
泛型和Any類型雖然看起來相似,但其實是有區別的。他們的區別在于Any類型會避開類型檢查,所以盡量少用或不用。
使用泛型能夠保證參數和返回值的類型相同
func add<T>(_ input:T) -> T{
//...
return input
}