はじめに
Swift4からKVOのやり方が変わったので備忘録です。
Objective-CまではNSStringでキー名を渡していたので、間違いが発生しやすかったです。
Swift4からはKeyを\
を使用して表現できるため、コンパイラチェックの恩恵が受けられるようになりました。
サンプルコード
ObservedObject.swift
class ObservedObject: NSObject {
@objc dynamic var count: Int = 0
func start() {
Time.scheduledTimer()
}
@objc func addCount(_ sender: Timer) {
count += 1
}
}
ViewController.swift
class ViewController: UIViewController {
@objc var obj: ObservedObject?
var observation: NSKeyValueObservation?
override func viewDidLoad() {
observation = observe(\.obj!.count, option: [.old, .new]) { object, change in
print("value=\(change.newValue)")
}
obj?.start()
}
}
参照
Using Key-Value Observing in Swift | Apple Developer Documentation
Swift4のKVOに感動した。 - Qiita
Expressions — The Swift Programming Language (Swift 5.1)