码迷,mamicode.com
首页 > 编程语言 > 详细

Swift之旅(七)范型

时间:2015-05-09 17:36:16      阅读:118      评论:0      收藏:0      [点我收藏+]

标签: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> = .None
possibleInteger = .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之旅(七)范型

标签:swift

原文地址:http://blog.csdn.net/ojlovecd/article/details/45602529

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!