首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Swift静态覆盖的循环警告是最终的

关于Swift静态覆盖的循环警告是最终的
EN

Stack Overflow用户
提问于 2018-11-12 20:27:49
回答 1查看 1.1K关注 0票数 1

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

要做到这一点,我要重写的特定函数,记录在这里是:

代码语言:javascript
复制
override open static func restoreWindow(withIdentifier identifier: NSUserInterfaceItemIdentifier, state: NSCoder, completionHandler: @escaping (NSWindow?, Error?) -> Void)

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

代码语言:javascript
复制
Static declarations are implicitly 'final'; use 'public' instead of 'open'

此警告包括一个看似有用的修复方法,将该open转换为public。但是,当我接受的时候,我会得到这样的错误:

代码语言:javascript
复制
Overriding static method must be as accessible as the declaration it overrides

此错误建议我将public替换为open

关于这种循环行为,我和苹果公司开了个雷达。但是,我真的很想找到一个方法来平息这个警告。或者,也许有另一种方法可以通知NSDocumentController子类它已经恢复了窗口。

若要重现此错误,请使用Xcode 10创建一个新的App项目,并包括以下代码。我只是把它放在AppDelegate声明之后。默认情况下,该项目配置为SWIFT4.2,并为macOS 10.14构建。

代码语言:javascript
复制
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)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-12 20:45:36

感谢Martin上面的链接到Swift编译器中的问题。这个问题也有一个解决办法,这确实解决了我的问题。

通过实际使用类而不是类Y中的覆盖中的静态来修复这个问题是可能的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53269608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档