Циркулярные предупреждения о том, что 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.

Другие вопросы по тегам