知识卡片
协议继承是需求叠加而非强耦合
内容
一个协议可以”继承”另一个协议(如protocol TabularDataSource: CustomStringConvertible),效果只是把父协议的全部要求原样叠加到子协议上——符合子协议的类型必须同时满足两边的接口。这和[[继承是类独有的能力]]里类继承的语义完全不同:类继承建立的是”是一个”的强耦合关系,子类共享父类的实现、状态与身份;协议继承没有实现可共享,纯粹是接口需求的合并,不产生任何耦合。此外,一个类型可以同时符合任意多个不相关的协议(用逗号并列声明),这是类单继承做不到的——协议这种”可任意组合的能力清单”模式,让类型可以按需拼装出恰好需要的接口组合,而不必被绑在一条单一的继承链上。
参考来源
《Swift编程权威指南》第19章《协议》