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

person Mattie    schedule 12.11.2018    source источник
comment
Я не получаю предупреждение с override public static в Xcode 10.1 - можете ли вы опубликовать минимально воспроизводимый пример?   -  person Martin R    schedule 12.11.2018
comment
Согласно bugs.swift.org/browse/SR-8673, это было исправлено. .   -  person Martin R    schedule 12.11.2018
comment
Это тот! И эта проблема также включает обходной путь. Большое спасибо.   -  person Mattie    schedule 12.11.2018


Ответы (1)


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

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

person Mattie    schedule 12.11.2018