在尖括号里写一个名字来创建一个泛型函数或者类型。
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)
你也可以创建泛型函数、方法、类、枚举和结构体。
// 重新实现 Swift 标准库中的可选类型
enum OptionalValue {
case None
case Some(Wrapped)
}
var possibleInteger: OptionalValue = .None
possibleInteger = .Some(100)
在类型名后面使用“where”来指定对类型的需求,比如,限定类型实现某一个协议,限定两个类型是相同的,或者限定某个类必须有一个特定的父类。
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>"是等价的。