发布于 2015-06-14 01:54:17 | 115 次阅读 | 评论: 0 | 来源: 网络整理
一个协议可由多个协议采用protocol<SomeProtocol, AnotherProtocol>
这样的格式进行组合,称为协议合成(protocol composition)
。
举个例子:
protocol Named {
var name: String { get }
}
protocol Aged {
var age: Int { get }
}
struct Person: Named, Aged {
var name: String
var age: Int
}
func wishHappyBirthday(celebrator: protocol<Named, Aged>) {
println("Happy birthday (celebrator.name) - you're (celebrator.age)!")
}
let birthdayPerson = Person(name: "Malcolm", age: 21)
wishHappyBirthday(birthdayPerson)
// 输出 "Happy birthday Malcolm - you're 21!
Named
协议包含String
类型的name
属性;Aged
协议包含Int
类型的age
属性。Person
结构体遵循
了这两个协议。
wishHappyBirthday
函数的形参celebrator
的类型为protocol<Named,Aged>
。可以传入任意遵循
这两个协议的类型的实例
注意:协议合成
并不会生成一个新协议类型,而是将多个协议合成为一个临时的协议,超出范围后立即失效。