ios - 定义产生 KeyValueObservingPublisher 的 `publisher(for:)` 方法的标头在哪里?
问题描述
我可以看到定义NSObject.KeyValueObservingPublisher
. 但我找不到定义publish(for:)
返回此发布者的方法的标头。而且我在文档中找不到它。
它必须涉及到 NSObject,因为用 KVO 只能观察到一个 NSObject。它必须以 和 的形式出现publisher(for:)
,publisher(for:options:)
因为这是 Xcode 中代码完成为我提供的。但是代码完成从哪里获取这些信息呢?
解决方案
它不在文档中,当您跳转到标题时,它在 Xcode 中不可见。然而,我发现它隐藏在 Xcode 中的.swiftinterface文件中:
@available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension _KeyValueCodingAndObservingPublishing where Self : ObjectiveC.NSObject {
public func publisher<Value>(for keyPath: Swift.KeyPath<Self, Value>, options: Foundation.NSKeyValueObservingOptions = [.initial, .new]) -> ObjectiveC.NSObject.KeyValueObservingPublisher<Self, Value>
}
所以声明存在,但没有记录。
我认为这里的问题是,此方法是在对协议的扩展中声明的,该协议_KeyValueCodingAndObservingPublishing
对文档和生成的接口不可见,下划线。我认为这是一个错误。
编辑Rob Mayoff 在评论中指出,您还可以在https://github.com/apple/swift/blob/master/stdlib/public/Darwin/Foundation/Publishers%2BKeyValueObserving.swift查看源代码。
推荐阅读
- c++ - 在 4 字节值上使用运算符“*”,然后将结果转换为 8 字节值
- android - Unity:垂直组布局滚动不适用于 Android
- c - 了解输出背后的原因
- r - 处理比可用内存更大的 quanteda 对象
- php - 如何添加外部 PHP 文件以在 HTML 登录页面中传播
- string - 找到我们可以交换的子序列数,以便给定的字符串保持良好状态
- r - 使用 psych::ICC 时的错误消息:参数长度为零
- python - Conway 在 Python 中的生命游戏在应该是死区的地方生成随机的长线
- reactjs - 反应滚动链接总是从顶部滚动
- python - 在 Django 中保存 UserCreationForm 的问题