Swift之旅(七)範型

來源:互聯網
上載者:User

標籤: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之旅(七)範型

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.