我有一个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
此错误建议我替换public
为open
.
我已经与 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)
}
}