使用尖括号可以定义泛型函数或类型。
func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {
var result = ItemType[]()
for i in 0..times {
result += item
}
return result
}
repeat("knock", 4)
同样可以创建泛型类、枚举类型和结构体类型。
//重新实现Swift标准库中的optional类型
enum OptionalValue<T> {
case None
case Some(T)
}
var possibleInteger: OptionalValue<Int> = .None
possibleInteger = .Some(100)
使用where
关键字可以给泛型添加一个限制列表,例如:两个类型必须相同、必须实现某个协议、必须是某个类的子类等。
func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.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])
试验
修改anyCommonElements
函数,使得它能够返回两个序列的交集。
在简单的情况下,可以省略where
,直接写后面的部分就可以了,如<T: Equatable>
与<T where T: Equatable>
的作用一样的。