ios - 如何删除添加了 observe() API 的 KVO 观察器?

标签 ios swift key-value-observing

<分区>

我读到 NSObject.observe<Value>()是用于注册 KVO 观察器的新 API(在 Swift 4 中引入),它支持 Swift 键路径表达式和闭包。我想知道新 API 中注销观察者的方法是什么?

observe<Value>()方法返回 NSKeyValueObservation对象,它没有显式取消观察的方法(根据它的代码,当对象被 ARC 释放时,它会隐式地取消观察)。所以似乎唯一的方法是使用旧的 NSObject.removeObserver()哪个使用旧的 keypath String 参数?

我也发现很难找到这个 observe() 的文档应用程序接口(interface)。 NSObject 中没有提到它doc(该文档包含 observeValue() 的描述,但不包含此 observe<Value> ),并且 XCode 中的代码完成不适用于它。我发现它在 Apple 官方文档中唯一提到的地方是这篇文章 Using Key-Value Observing in Swift .这让我想到这是未完成的还是正在进行的工作? (但鉴于它是在 Swift 4 时间框架中引入的,我对此表示怀疑)。

最佳答案

示例使用键值观察

/// define an Observer
var observation: NSKeyValueObservation?
override func viewDidLoad() {
    super.viewDidLoad()
    /// start observation
    observation = view.observe(\.backgroundColor, options: [.old, .new], changeHandler: { (view, value)  in
    })
    /// invalidate observation
    observation?.invalidate()
    observation = nil
}

关于ios - 如何删除添加了 observe() API 的 KVO 观察器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59450816/

上一篇:ios - React Native 中的 Keyboard.dismiss 不会关闭键盘

下一篇:android - 在小部件树 Flutter 中检测到重复的 GlobalKey

相关文章:

swift - Mixpanel初始化错误: argument passed to call that takes no arguments

ios - NavigationLink 仅适用于长按 SwiftUI

ios - 从我的 Parse 数据库中获取任意数量的 UserID 的最快方法

Swift KVO 绑定(bind)未更新

objective-c - CGImageRelease 导致崩溃

javascript - 在移动版 Safari 中针对多页 PDF 强制打印对话框

IOS - Objective-C ,如何读取核心数据并将其存储到可变数组中

ios UITableViewCell 以编程方式在 drawRect 与 layoutSubviews 中创建

ios - dealloc AVCaptureVideoPreviewLayer 期间罕见崩溃

swift - 初始化字典 : in Objective-C and Swift