objc_getClass:加载swiftclass继承NSObject

objc_getClass: load swift class inheriting NSObject

我正在尝试使用 objc 运行时动态加载继承自 NSObject 的 Swift class。 (我正在尝试从 ObjC 加载 class,而不是从 Swift)

我的Swiftclass:

@objc public class TestClass : NSObject {

    @objc public func testMethod() -> String {
        return "String"
    }

}

根据 Apple 的文档,

The @objc attribute makes your Swift API available in Objective-C and the Objective-C runtime

但是objc_getClass("TestClass")的结果是(null)

我是不是做错了什么?或者根本不可能加载 swift classes 继承 ObjC class 使用 objc 运行时?

如果你尝试 objc_getClass("YourAppName.TestClass") 会怎么样?模块名称很可能是前置的。您可以使用 NSStringFromClass([TestClass class])

验证幕后使用的确切名称

您需要为您的 class 指定一个 Objective-C 名称,而不仅仅是包括 @objc:

@objc(TestClass) public class TestClass : NSObject {

    @objc public func testMethod() -> String {
        return "String"
    }

}

NSClassFromString("TestClass") // TestClass.Type

objc_getClass("TestClass") // TestClass

否则你的 class 将不会注册到 Objective-C 运行时,并且像 objc_getClassNSClassFromString 这样的调用将 return nil .