Swift協議合成
協議合成
一個協議可由多個協議采用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>
。可以傳入任意遵循
這兩個協議的類型的實例
注意:協議合成
並不會生成一個新協議類型,而是將多個協議合成為一個臨時的協議,超出範圍後立即失效。