標籤:swift
在角括弧裡面寫上名稱就可以使函數或者類型變為範型。
func repeat<Item>(item: Item, times: Int) -> [Item] { var result = [Item]() for i in 0..<times { result.append(item) } return result}repeat("knock", 4)
不僅可以定義範型函數和方法,還可以定義範型類、枚舉和結構體。
// 重新實現 Swift 標準類庫的可選類enum OptionalValue<T> { case None case Some(T)}var possibleInteger: OptionalValue<Int> = .NonepossibleInteger = .Some(100)
在類型名後面加 where 來指定一組約束——例如,要求類型必須是實現一個協議的,要求兩個類型必須是一致的,或者要求類必須繼承某個特定的父類。
func anyCommonElements <T, U where T: SequenceType, U: SequenceType, 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 函數,返回兩個集合相等部分。
在這個簡單的例子中,你可以省略掉 where ,只需簡寫為在冒號後加上協議名或類名即可。 <T: Equatable>
的寫法與 <T where T: Equatable>
是一樣的。
Swift之旅(七)範型