1.1 泛型介紹
泛型的概念最早出自C++,Swift的泛型與其設(shè)計(jì)思路相同绞绒,與Java不同婶希。
優(yōu)缺點(diǎn)
C++與Swift:是編譯時(shí)多態(tài)技術(shù),編譯器確定類型蓬衡,運(yùn)行時(shí)不需要計(jì)算喻杈。
缺點(diǎn):生成的機(jī)器碼二進(jìn)制包大一些,雖執(zhí)行快但可能有更多I/O狰晚。
Java:是運(yùn)行時(shí)多態(tài)筒饰,運(yùn)行時(shí)才確定的。
缺點(diǎn):運(yùn)行時(shí)才能看到家肯。
使用泛型讓代碼更簡(jiǎn)潔和安全龄砰。減少?gòu)?qiáng)制轉(zhuǎn)換以及其帶來的出錯(cuò)風(fēng)險(xiǎn)。
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 類型約束
使用泛型時(shí)可以對(duì)定義的泛型遵守Hashable協(xié)議讨衣,Swift中换棚。String、Int反镇、Double等都是遵循Hashable協(xié)議的固蚤。
Hashable協(xié)議是繼承Equatable協(xié)議的,在遵循了Equatable協(xié)議之后歹茶,就可以支持“==”或“夕玩!=”比較你弦。
1.3 泛型和Any的區(qū)別
泛型和Any類型雖然看起來相似,但其實(shí)是有區(qū)別的燎孟。他們的區(qū)別在于Any類型會(huì)避開類型檢查禽作,所以盡量少用或不用。
使用泛型能夠保證參數(shù)和返回值的類型相同
func add<T>(_ input:T) -> T{
//...
return input
}