Swift協議的繼承
協議的繼承
協議能夠繼承一到多個其他協議。語法與類的繼承相似,多個協議間用逗號,
分隔
protocol InheritingProtocol: SomeProtocol, AnotherProtocol {
// 協議定義
}
如下所示,PrettyTextRepresentable
協議繼承了TextRepresentable
協議
protocol PrettyTextRepresentable: TextRepresentable {
func asPrettyText() -> String
}
遵循``PrettyTextRepresentable
協議的同時,也需要遵循
TextRepresentable`協議。
如下所示,用擴展
為SnakesAndLadders
遵循PrettyTextRepresentable
協議:
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
數組中的每一個元素:
-
當從數組中迭代出的元素的值大於0時,用
▲
表示 -
當從數組中迭代出的元素的值小於0時,用
▼
表示 -
當從數組中迭代出的元素的值等於0時,用
○
表示
任意SankesAndLadders
的實例都可以使用asPrettyText()
方法。
println(game.asPrettyText())
// A game of Snakes and Ladders with 25 squares:
// ○ ○ ▲ ○ ○ ▲ ○ ○ ▲ ▲ ○ ○ ○ ▼ ○ ○ ○ ○ ▼ ○ ○ ▼ ○ ▼ ○