Kotlin

在 Kotlin 裡覆寫 property 的 setter

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