今天複寫一個成員變數的 setter 之後,發現後續拿到的值還是 null ,
查了一下原來是雖然在 setter 有拿到一個值,但是還是要自己設定到該變數裡面去。
目前的經驗
Objective-C
一開始從 Objective-C 時代開始
是需要自己把 setter 拿到的直設定到 instance variable:
- (void)setName:(NSString *)name {
_name = name; // _name 是 @property 在自動 synthesize 之後附贈的 instance variable
}
Swift
但是到 Swift 時代之後,這件事情不用(或是說不能)再自己做,於是在寫慣用的 didSet 的時候就逐漸習慣不要寫這個東西了:
var name: String? {
didSet {
// 做設定完想做的事
}
}
Kotlin
var name: String? = null
set(newName) {
field = newName
}
field 是 Kotlin 提供的一個魔術變數,在想要覆寫 setter 行為的時候,可以把該設定的數值設定進 field