在尖括號裏寫一個名字來建立一個泛型函數或者類型。javascript
func repeatItem<Item>(item: Item, numberOfTimes: Int) -> [Item] {
var result = [Item]() for _ in 0..<numberOfTimes { result.append(item) } return result } repeatItem("knock", numberOfTimes:4)
你也能夠建立泛型函數、方法、類、枚舉和結構體。java
// Reimplement the Swift standard library's optional type enum OptionalValue<Wrapped> { case None case Some(Wrapped) } var possibleInteger: OptionalValue<Int> = .None possibleInteger = .Some(100)
在類型名後面使用where
來指定對類型的需求,好比,限定類型實現某一個協議,限定兩個類型是相同的,或者限定某個類必須有一個特定的父類。swift
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])
練習: 修改
anyCommonElements(_:_:)
函數來建立一個函數,返回一個數組,內容是兩個序列的共有元素。數組
<T: Equatable>
和<T where T: Equatable>
是等價的。app