知识卡片
协议扩展提供默认实现替代继承共享代码
内容
[[协议解耦接口与实现并可作为类型使用]]的协议本身只能声明需求、不能带实现,但给协议写[[扩展只能加行为不能加存储]]中的extension就能为协议里的某个需求(如CustomStringConvertible的description)提供一份默认实现——只要符合该协议的类型没有自己重新实现这个成员,就会自动获得协议扩展里写好的行为,一次编写、所有遵从者共享,完全不需要类的继承关系。这正是Swift”协议导向编程”解决传统OOP痛点的核心手法:面向对象要共享代码通常得靠继承,但继承层次一深就容易变成难以理解的类网;协议扩展让struct、enum、class都能以”符合协议”的方式获得共享实现,值类型也能享受到过去只有类继承才能提供的代码复用,同时避免了继承带来的强耦合和单继承的限制。
参考来源
《Swift编程权威指南》第23章《协议扩展》