Posted at

在 Kotlin 裡覆寫 property 的 setter

More than 1 year has passed since last update.

今天複寫一個成員變數的 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