gpt4 book ai didi

swift - 关于 Swift static override being final 的循环警告

转载 作者:搜寻专家 更新时间:2023-11-01 06:26:46 29 4
gpt4 key购买 nike

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

我正在覆盖的特定功能,documented here ,这样做是:

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)
}
}

最佳答案

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

Fixing this is possible by actually using class instead of static in the override in class Y.

关于swift - 关于 Swift static override being final 的循环警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53269608/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com