NGパターン
class Person {
var name: String? {
get {
name // 無限ループ
}
set {
name = newValue // 無限ループ
}
}
}
こう書くと、getterがnameを返そうとするときにsetterが呼ばれて、setterがnameを設定しようとするときにgetterが呼ばれてしまって、無限ループが発生し、クラッシュするので注意が必要です。
解消法
class Person {
private var _name: String?
var name: String? {
get {
_name
}
set {
_name = newValue
}
}
}
private変数_nameを使用して値を保持し、setterでそれにアクセスすることで無限ループを避けることができます。
補足
class Person {
var name: String? {
didSet {
name = newValue
}
}
}
didSetなら無限ループしないです。