Быстрое расширение 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.