协议扩展(Protocol Extension)是Swift中的一个非常实用的特性,它可以通过扩展的方式为遵循协议的类型提供属性、方法等实现。
定义协议扩展
使用extension可以为协议添加扩展实现:
protocol Printable {
func print()
}
extension Printable {
func print() {
print("Default implementation")
}
}
这里为Printable协议添加了默认的print()实现。
采纳协议
结构体、类、枚举可以通过采纳协议获得扩展中添加的默认实现:
struct Content: Printable {
// 无需再自行实现print()
}
let content = Content()
content.print() // 直接调用
非常方便地获得协议实现。
条件采纳
可以基于限制只为满足条件的协议类型扩展实现:
extension Collection where Element: Equatable {
func allEqual() -> Bool {
// 判断是否所有元素相等
}
}
只有当集合元素遵循Equatable,才添加allEqual方法。
总结
协议扩展增强了Swift协议的表达力,采用协议无需全部实现即可获得默认实现。这大大提高了协议的灵活性和复用性。