Быстрое расширение XCSourceEditorCommandInvocation вызывает исключение "нераспознанный селектор отправлен в экземпляр"

Когда я пытаюсь добавить быстрые расширения для классов в XcodeKit (фреймворк для добавления расширений Xcode), компилятор с радостью соберет без ошибок, но при запуске кода я получаю следующее исключение:

-[XCSourceEditorCommandInvocation test]: unrecognized selector sent to instance 0x7fc60543f2b0

Ниже приведен пример кода, который может воспроизвести исключение:

class SourceEditorCommand: NSObject, XCSourceEditorCommand {
    func perform(with invocation: XCSourceEditorCommandInvocation, completionHandler: @escaping (Error?) -> Void ) -> Void {
        // Call extension method
        invocation.test() // <--- Exception thrown here

        completionHandler(nil)
    }
}

extension XCSourceEditorCommandInvocation {
    func test() {
        print("it works!")
    }
}

В прошлом я быстро расширял классы ObjC без каких-либо проблем, поэтому я немного застрял здесь.

Я пробовал:

  • добавление @objc до объявления метода.
  • добавление public на расширение и метод.
  • Я не расширяю кластер классов, так что это, вероятно, не этот вопрос.
  • Я не расширяю протокол, так что, скорее всего, это не вопрос.

1 ответ

Решение

В настоящее время ни категории Objective-C, ни расширения Swift не поддерживаются для классов или типов в XcodeKit.framework.

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