Чтобы узнать КВО, я скопировал код из https://developer.apple.com/documentation/swift/cocoa_design_patterns/using_key_value_observing_in_swift. Это выглядит следующим образом
class MyObjectToObserve: NSObject {
@objc dynamic var myDate = NSDate(timeIntervalSince1970: 0) // 1970
func updateDate() {
myDate = myDate.addingTimeInterval(Double(2 << 30)) // Adds about 68 years.
}
}
class MyObserver: NSObject {
@objc var objectToObserve: MyObjectToObserve
var observation: NSKeyValueObservation?
init(object: MyObjectToObserve) {
objectToObserve = object
super.init()
observation = observe(
\.objectToObserve.myDate,
options: [.old, .new]
) { object, change in
print("myDate changed from: \(change.oldValue!), updated to: \(change.newValue!)")
}
}
}
let observed = MyObjectToObserve()
let observer = MyObserver(object: observed)
observed.updateDate()
Со второй до последней строки будет выдано предупреждение, поскольку observer
не используется. После того, как я заменил let observer
на _
, как это предложено XCode, предупреждение исчезло, но оно выдаст ошибку времени выполнения:
Тема 1: EXC_BAD_ACCESS (код = EXC_I386_GPFLT)
Моя цель - получить ответ на следующие вопросы:
1. Кто-нибудь знает, почему это вызывает ошибку?
2.Как устранить предупреждение?
3.Это пример UPD-DATE для KVO в Swift? Уровень синтаксиса?