1

我有一个NSDocumentController子类需要知道它是否通过NSWindowRestoration协议恢复了任何窗口。

我要覆盖的特定功能,记录在这里,这样做是:

override open static func restoreWindow(withIdentifier identifier: NSUserInterfaceItemIdentifier, state: NSCoder, completionHandler: @escaping (NSWindow?, Error?) -> Void)

正如所写,这个函数在我想要的时候被调用并且完美地工作。但是,我收到以下警告:

Static declarations are implicitly 'final'; use 'public' instead of 'open'

此警告包含一个看似有用的修复程序,可将其open转换为public. 但是,当我接受时,我会收到此错误:

Overriding static method must be as accessible as the declaration it overrides

此错误建议我替换publicopen.

我已经与 Apple 就这种循环行为打开了雷达。但是,我真的很想找到一种方法来消除这个警告。或者,也许还有另一种方法可以通知 NSDocumentController 子类它已恢复窗口。

要重现此错误,请使用 Xcode 10 创建一个新的 App 项目,并包含以下代码。我只是在AppDelegate声明后把它扔进去了。默认情况下,该项目配置了 Swift 4.2 并为 macOS 10.14 构建。

class MyDocumentController: NSDocumentController {
    override open static func restoreWindow(withIdentifier identifier: NSUserInterfaceItemIdentifier, state: NSCoder, completionHandler: @escaping (NSWindow?, Error?) -> Void) {
        super.restoreWindow(withIdentifier: identifier, state: state, completionHandler: completionHandler)
    }
}
4

1 回答 1

3

感谢上面的 Martin R 提供了 Swift 编译器中问题的链接。该问题也有一个解决方法,它确实为我解决了这个问题。

可以通过在类 Y 的覆盖中实际使用类而不是静态来解决此问题。

于 2018-11-12T20:45:36.863 回答