我尝试使用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类?
答案 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_getClass
或NSClassFromString
之类的调用将返回nil
。
答案 1 :(得分:2)
如果您尝试objc_getClass("YourAppName.TestClass")
怎么办?很可能模块名称是前置的。您可以使用NSStringFromClass([TestClass class])