让 Swift 为你所用:协议与泛型
协议的 where 子句
在 Swift 中,当我们定义了占位符类型后,可以使用任意数量的 where 子句,它能让我们表示更复杂的关系。
比如,我们要写一个函数来检查容器是否包含特定值,就需要元素类型是可比较的:
func container<C: Container where C.Element: Equatable>(
container: C,
hasElement element: C.Element
) -> Bool
{
var hasElement = false
container.enumerateElements { testElement in
if element == testElement {
hasElement = true
}
}
return hasElement
}
这里,占位符 C 必须实现 Container 协议,并且其 Element 类型必须是可比较的。
有时候,我们还想在多个占位符之间建立关系,这可以在 where 子句中使用相等性测试来实现。
相等性的 where 子句
如果要写一个函数将一个容器合并到另一个容器中,同时允许具体类型有所不同,我们可以要求
超级会员免费看
订阅专栏 解锁全文
1145

被折叠的 条评论
为什么被折叠?



