XCSourceEditorCommandInvocation swift扩展导致"无法识别的选择器被发送到实例"例外

时间:2016-12-22 17:25:52

标签: swift swift-extensions xcode-extension

当我尝试在XcodeKit(添加Xcode扩展的框架)中为类添加swift扩展时,编译器很乐意构建而没有任何错误,但是当代码运行时,我得到以下异常:

-[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!")
    }
}

我过去在swift中扩展了ObjC课程,没有任何问题,所以我有点卡在这里。

我试过了:

  • 在方法声明之前添加@objc
  • public添加到扩展名和方法。
  • 我没有扩展类群,因此它可能不是this question
  • 我没有延长协议,因此它可能不是this question

1 个答案:

答案 0 :(得分:2)

目前XcodeKit.framework中的类或类型都不支持Objective-C类别和Swift扩展。