クラスの機能を拡張する手段として、エクステンションや継承、プロトコルといった方法が挙げられるが、今回はエクステンションを使ったクラス拡張の基本例を紹介する。
まずは元となるクラスを見ていこう。
それぞれ一つずつのプロパティとメソッドを持つ、シンプルなクラスだ。
class Player {
var name:String = ""
func hello() {
print("Hello! \(name)")
}
}
このPlayerクラスに対し、エクステンションではComputedプロパティと、メソッドを追加することができる。
extension Player {
var who:String {
get {
return name
}
set(value) {
name = value
}
}
func bye() {
print("Bye! \(name)")
}
}
上記の例では、まずComputedプロパティを追加してwhoプロパティからnameプロパティへアクセスできるようにし、byeメソッドを追加している。
実際に拡張したPlayerクラスをインスタンス化し、動作確認をおこなってみる。
let obj = Player()
obj.who = "花子"
obj.hello()
obj.bye()
// Hello! 花子
// Bye! 花子
元のPlayerクラスには無かったはずのwhoとbyeが使えるようになっていることが分かる。