知识卡片

协议扩展提供默认实现替代继承共享代码

专业/工作 · 757

内容

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

参考来源

《Swift编程权威指南》第23章《协议扩展》