知识卡片
协议混合更贴近面向协议编程
内容
当一个函数需要接收”同时满足多个[[协议是只声明不实现的契约|协议]]“的参数时,早期做法是 另外定义一个把这几个协议都实现了的具体类,再用这个类的类型去限定参数——但这样一来参数 类型又被绑回了某个具体实现,而不是纯粹的能力约定。Swift 4 支持用 & 把多个协议直接组合 成一个复合类型约束(如 Teach & People),参数类型仍然只表达”具备哪些能力”,不再需要 借助某个中间类来间接表达。发散:这一步把”面向协议编程”往前推得更彻底——协议之间原本只能 通过继承单向组合,&复合让协议可以像拼积木一样按需临时组合出新的能力约束,而不必提前设计 出一个专门的联合协议或联合类。
参考来源
《Swift 4从零到精通iOS开发》第12章《Swift 4特性指南》