協(xié)議能夠繼承一到多個其他協(xié)議。語法與類的繼承相似,多個協(xié)議間用逗號,分隔
protocol InheritingProtocol: SomeProtocol, AnotherProtocol {
// 協(xié)議定義
}
如下所示,PrettyTextRepresentable協(xié)議繼承了TextRepresentable協(xié)議
protocol PrettyTextRepresentable: TextRepresentable {
func asPrettyText() -> String
}
遵循``PrettyTextRepresentable協(xié)議的同時,也需要遵循TextRepresentable`協(xié)議。
如下所示,用擴展為SnakesAndLadders遵循PrettyTextRepresentable協(xié)議:
extension SnakesAndLadders: PrettyTextRepresentable {
func asPrettyText() -> String {
var output = asText() + ":\n"
for index in 1...finalSquare {
switch board[index] {
case let ladder where ladder > 0:
output += "▲ "
case let snake where snake < 0:
output += "▼ "
default:
output += "○ "
}
}
return output
}
}
在for in中迭代出了board數(shù)組中的每一個元素:
▲表示▼表示○表示
任意SankesAndLadders的實例都可以使用asPrettyText()方法。
println(game.asPrettyText())
// A game of Snakes and Ladders with 25 squares:
// ○ ○ ▲ ○ ○ ▲ ○ ○ ▲ ▲ ○ ○ ○ ▼ ○ ○ ○ ○ ▼ ○ ○ ▼ ○ ▼ ○