Циркулярные предупреждения о том, что Swift статическое переопределение является окончательным - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть подкласс 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 Ответ

0 голосов
/ 12 ноября 2018

Спасибо Martin R выше за ссылку на проблему в компиляторе Swift.Эта проблема также имеет обходной путь, который действительно решает проблему для меня.

Исправить это можно, фактически используя класс вместо статического в переопределении в классе Y.

...