在尖括号里来写一个名字来创建一个泛型函数或者类型
func repeatItem<Item>(item:Item,numberOfTimes:Int) ->[Item] {
var result = [Item]()
for _ in 0..<numberOfTimes {
result.append(item)
}
return result
}
repeatItem("knock", numberOfTimes: 4)
创建泛型类,枚举和结构体
enum OptionalValue <Wrapped> {
case None
case Some(Wrapped)
}
var possibleInteger: OptionalValue<Int> = .None
possibleInteger = .Some(100)
在类型名后面使用where来指定一个需求列表,列如要限定实现一个协议的类型,需要限定两个类型要想通,活着限定一个类必须又一个特定的父类。
func anyCommonElements <T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, _ rhs: U) -> Bool {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
anyCommonElements([1, 2, 3], [3])
//简单起见,你可以忽略 where,只在冒号后面写接口或者类名。<T: Equatable>和<T where T: Equatable>是等价的。