SwiftのdidSetはイニシャライザで呼ばれない
SwiftでdidSet
を使う機会が多いんだけど、この前気がついたことがある。
それはイニシャライザ内でdidSet
が呼ばれないということ。何故か値が更新されずに困った。
stackoverflowにワークアラウンドが記載されていて、回避方法としてはsetVariable
みたいなセッターを用意すること。
class Person {
var name: String {
didSet {
nameVariable.value = name
}
}
var nameVariable = Variable<String>("")
init(name: String) {
self.name = name
setVariable(name)
}
func setVariable(_ newValue: String) {
nameVariable.value = newValue
}
}
上記の方法は回りくどいだけなので、このような場合は以下のように初期化時に値をセットするだけで良いと思う。
class Person {
var name: String {
didSet {
nameVariable.value = name
}
}
var nameVariable = Variable<String>("")
init(name: String) {
self.name = name
nameVariable.value = name
}
}
ここまで書いて気づいたんだけど、イニシャライズする際にdidSet
が呼ばれないのは、didSet
が呼ばれることによってどこで値がセットされているかわかりづらくなってしまうからなのかもしれない。
とは言え呼ばれて欲しい気持ちはある。