Swiftでは簡単にプロパティのgetterとsetterが定義できる。
class BaseCounter {
var counter: Int {
get {
println("This is get")
return self.counter + 1
}
set {
println("This is set")
}
}
init() {
counter = 0
}
}
このような形でクラスの書くプロパティに対して、任意のgetterとsetterを定義できる。
ところがこれを呼ぶと大変なことになる。
let c = BaseCounter()
println(c.counter)
//
// This is get
// This is get
// This is get
// This is get
// This is get
// ... 永遠に続く
どうやらgetの中に書いてあるself.counter
がまたさらにgetterを呼ぶためにこういうことになるみたい。サンプル見ても自分自身の参照をgetterの中には書いてないのでやめた方がいいみたい。
そのproperty自体を操作して返す場合にはgetterを定義しない方がいいということなのかな。