8.1.5 协议组合

8.1.5 协议组合

协议也是可以组合的,之前已经提到过,使用“,”将需要组合的协议分隔开。示例如下:

动手写8.1.5 CombineProtocol

控制台输出如下:

本例中首先定义了Smell和Taste两个协议;接着定义了Food协议,它是Smell和Taste的组合,并且增加了name属性;然后声明结构体Fruit,它满足Food协议;最后实现了三个函数,分别用于打印满足Smell、Taste和Food协议的实例。在printFood中是直接调用了printTaste和printSmell。读者需要注意的是,若函数printFood的传入参数指定同时满足Smell和Taste协议,那就在函数声明时使用“&”连接需要满足的多个协议。通过组合使用协议的方式,Fruit中就没有冗余的属性需要提供,使得代码结构更为精简紧凑了。