Key-Value Observing (KVO) — это механизм, который позволяет объектам получать уведомления об изменениях определённых свойств. В Swift и AppKit он часто используется для привязки данных и синхронизации состояния.
Чтобы свойство поддерживало KVO, оно должно быть доступно Objective-C runtime. Пометь его атрибутами @objc и dynamic:
@objc dynamic var userName: String = ""
Оба атрибута обязательны — @objc делает свойство доступным для runtime, а dynamic гарантирует, что изменения будут распределены через него.
Используй блочный Swift API для чистого и типобезопасного подхода:
let token = model.observe(\.userName, options: [.new, .old]) { model, change in
print("Changed to: \(change.newValue ?? "")")
}
Ключевые моменты:
\.userName — это key path к наблюдаемому свойствуoptions такие как .new и .old определяют, какая информация об изменениях будет доставленаtoken должен быть сохранён — он поддерживает наблюдение активнымСохрани токен наблюдения в свойстве и вызови invalidate() когда наблюдение больше не требуется:
token.invalidate()
Если токен будет удалён из памяти, наблюдение автоматически остановится. Это делает управление жизненным циклом простым по сравнению со старым Objective-C API.
observeValue(forKeyPath:) для более безопасного и читаемого кодаОба атрибута @objc и dynamic требуются на KVO свойствах, потому что @objc предоставляет свойство в runtime Objective-C, а dynamic гарантирует, что изменения направляются через runtime.
Новый — ещё не проверен сообществом
Вы