Swift中Protocol Extension详解

协议扩展(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代码的聚合性和可维护性。