У меня есть подкласс 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)
}
}
override public static
в Xcode 10.1 - можете ли вы опубликовать минимально воспроизводимый пример? - person Martin R   schedule 12.11.2018