objc_getClass:加载继承NSObject的swift类

时间:2017-01-23 15:48:51

标签: objective-c swift objective-c-runtime

我尝试使用objc运行时动态加载从sb1.append(sb2)继承的Swift类。 (我试图从ObjC加载类,而不是从Swift加载)

My Swift课程:

NSObject

根据Apple的文档,

  

@objc public class TestClass : NSObject { @objc public func testMethod() -> String { return "String" } } 属性使您的Swift API在Objective-C和Objective-C运行时可用

@objc的结果是objc_getClass("TestClass")

我做错了吗?或者根本不可能使用objc运行时加载继承ObjC类的swift类?

2 个答案:

答案 0 :(得分:4)

您需要为您的班级指定一个Objective-C名称,而不只是包含@objc

@objc(TestClass) public class TestClass : NSObject {

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

}

NSClassFromString("TestClass") // TestClass.Type

objc_getClass("TestClass") // TestClass

否则,您的类将不会在Objective-C运行时注册,而objc_getClassNSClassFromString之类的调用将返回nil

答案 1 :(得分:2)

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

验证幕后使用的确切名称