协议扩展(Protocol Extension)是Swift中的一个非常实用的特性,它可以通过扩展的方式为遵循协议的类型提供属性、方法等实现。
定义协议扩展
使用extension可以为协议添加扩展实现:
protocol Printable {
func print()
}
extension Printable {
func print() {
print("Default print method")
}
}
这里为Printable协议添加了默认的print()实现。
遵循协议
结构体、类、枚举可以通过遵循协议获得扩展中添加的默认实现:
struct Content: Printable {
// 无需实现print()
}
let c = Content()
c.print() // 调用默认实现
条件遵循
可以基于某条件只为遵循协议的类型扩展部分实现:
extension Collection where Element: Equatable {
func allEqual() -> Bool {
for element in self {
if element != self.first {
return false
}
}
return true
}
}
只有当集合元素遵循Equatable时,才添加allEqual方法。
总结
协议扩展增强了协议的表现力,类型可以遵循协议而无需全部实现。这提高了Swift代码的聚合性和可维护性。