在尖括號里寫一個名字來創(chuàng)建一個泛型函數(shù)或者類型。
func repeatItem(repeating item: Item, numberOfTimes: Int) -> [Item] {
? var result = [Item]()
? for _ in 0..< numberOfTimes {
? ? result.append(item)
? }
? return result
}
repeatItem(repeating: "knock", numberOfTimes:4)
你也可以創(chuàng)建泛型函數(shù)、方法、類、枚舉和結構體。
// 重新實現(xiàn) Swift 標準庫中的可選類型
enum OptionalValue {
? case None
? case Some(Wrapped)
}
var possibleInteger: OptionalValue = .None
possibleInteger = .Some(100)
在類型名后面使用“where”來指定對類型的需求,比如,限定類型實現(xiàn)某一個協(xié)議,限定兩個類型是相同的,或者限定某個類必須有一個特定的父類。
func anyCommonElements(_ lhs: T, _ rhs: U) -> Bool
? where T.Iterator.Element: Equatable, T.Iterator.Element == U.Iterator.Element {
? ? for lhsItem in lhs {
? ? ? for rhsItem in rhs {
? ? ? ? if lhsItem == rhsItem {
? ? ? ? ? return true
? ? ? ? }
? ? ? }
? ? }
? return false
}
anyCommonElements([1, 2, 3], [3])
"<T:Equatable>"和"<T>... where T: Equatable>"是等價的。