The Pragmatic Ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

SwiftでKVOするときはObjective-Cのプロパティ名を使う

当たり前といえば当たり前なんですが、 iOSのKVO(addObserver(_:forKeyPath:options:context:))はObjective-CのNSObjectのメソッドなので、指定するkeyPathはObjective-Cのプロパティ名じゃないとだめです。

例えばUIViewのisHiddenをKVOしたい場合は↓のように、isHiddenではなくhiddenになります。

// Swift3以前
view.addObserver(self, forKeyPath: "hidden", options: [], context: nil)
// Swift3以降
view.addObserver(self, forKeyPath: #keyPath(UISwitch.hidden), options: [], context: nil)

iOSフレームワークのクラスに対してKVOを使う際は、補完に頼るとミスることがあるので、Objective-Cの仕様も確認しましょう (#keyPathがもうちょい賢ければ・・)

addObserver(_:forKeyPath:options:context:) - NSObject | Apple Developer Documentation