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:
// ○ ○ ▲ ○ ○ ▲ ○ ○ ▲ ▲ ○ ○ ○ ▼ ○ ○ ○ ○ ▼ ○ ○ ▼ ○ ▼ ○