第二十一章 协议
12. Protocol Composition (协议组合)
有些时候需要在同一时间来请求一个类型来遵循多个协议,所以我们可以把多个协议组合在一起形成一个单一的请求,这个过程我们称之为协议组合。如果说我们定义一个暂时性的本地协议,并且这个协议在一个组合里面请求多个协议的时候,这个时候协议组合并不会定义新的协议类型。
协议组合有这样的一个形式SomeProtocol & AnotherProtocol,随意我们可以添加很多个协议只要符合当前这个协议组合的形式就行,并用&
符号分开这些协议,一个协议组合同样也可以只有一个类类型,用来指明一个请求的父类。
下面这个例子是将两个协议Named和Aged组合成了一个单一的协议组合,来作为函数的参数类型,
// 组合两个协议
protocol Named {
var name: String {
get }
}
protocol Aged {
var age: Int {
get }
}
struct Person: Named, Aged {
var name: String
var age: Int
}
// 组合协议作为函数的参数类型
func wishHappyBirthday(to celebrator: Named & Aged) {
print("Happy birthday, \(celebrator.name), you're \(celebrator.age)!")
}
let birthdayPerson = Person(name