Swift简明教程(七)泛型

Swift简明教程(七)泛型


使用尖括号可以定义泛型函数或类型。

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>的作用一样的。


你可能感兴趣的:(Swift简明教程(七)泛型)