Swift 中的协议扩展详解

协议扩展(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协议的表达力,采用协议无需全部实现即可获得默认实现。这大大提高了协议的灵活性和复用性。