首页 > 解决方案 > 定义产生 KeyValueObservingPublisher 的 `publisher(for:)` 方法的标头在哪里?

问题描述

我可以看到定义NSObject.KeyValueObservingPublisher. 但我找不到定义publish(for:)返回此发布者的方法的标头。而且我在文档中找不到它。

它必须涉及到 NSObject,因为用 KVO 只能观察到一个 NSObject。它必须以 和 的形式出现publisher(for:)publisher(for:options:)因为这是 Xcode 中代码完成为我提供的。但是代码完成从哪里获取这些信息

标签: ioscombine

解决方案


它不在文档中,当您跳转到标题时,它在 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查看源代码。


推荐阅读