我有一个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。
关于这种循环行为,我和苹果公司开了个雷达。但是,我真的很想找到一个方法来平息这个警告。或者,也许有另一种方法可以通知NSDocumentController子类它已经恢复了窗口。
若要重现此错误,请使用Xcode 10创建一个新的App项目,并包括以下代码。我只是把它放在AppDelegate声明之后。默认情况下,该项目配置为SWIFT4.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)
}
}发布于 2018-11-12 20:45:36
感谢Martin上面的链接到Swift编译器中的问题。这个问题也有一个解决办法,这确实解决了我的问题。
通过实际使用类而不是类Y中的覆盖中的静态来修复这个问题是可能的。
https://stackoverflow.com/questions/53269608
复制相似问题