Swift在擴展中添加協議成員
在擴展中添加協議成員
即便無法修改源代碼,依然可以通過擴展(Extension)
來擴充已存在類型(譯者注: 類,結構體,枚舉等)。擴展
可以為已存在的類型添加屬性
,方法
,下標
,協議
等成員。詳情請在擴展章節中查看。
注意: 通過擴展
為已存在的類型遵循
協議時,該類型的所有實例也會隨之添加協議中的方法。
TextRepresentable
協議含有一個asText
,如下所示:
protocol TextRepresentable {
func asText() -> String
}
通過擴展
為上一節中提到的Dice
類遵循TextRepresentable
協議
extension Dice: TextRepresentable {
cun asText() -> String {
return "A \(sides)-sided dice"
}
}
從現在起,Dice
類型的實例可被當作TextRepresentable
類型:
let d12 = Dice(sides: 12,generator: LinearCongruentialGenerator())
println(d12.asText())
// 輸出 "A 12-sided dice"
SnakesAndLadders
類也可以通過擴展
的方式來遵循協議:
extension SnakeAndLadders: TextRepresentable {
func asText() -> String {
return "A game of Snakes and Ladders with \(finalSquare) squares"
}
}
println(game.asText())
// 輸出 "A game of Snakes and Ladders with 25 squares"