Циркулярные предупреждения о том, что Swift статическое переопределение является окончательным
У меня есть 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 и включите следующий код. Я просто бросил его после 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)
}
}
1 ответ
Спасибо Martin R выше за ссылку на проблему в компиляторе Swift. Эта проблема также имеет обходной путь, который действительно решает проблему для меня.
Исправить это можно, фактически используя класс вместо статического в переопределении в классе Y.