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_getClass
或 NSClassFromString
这样的调用将 return nil
.
我正在尝试使用 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_getClass
或 NSClassFromString
这样的调用将 return nil
.