0x00 场景
创建一个OC项目:Demo
新建一个Swift文件:TestObject.swift
在OC文件中引入:#import "Demo-Swift.h"
本来是想通过NSStringFromClass(@"TestObject")
方法来确定,是不是TestObject
这个类
实际结果是:
Class cls = NSClassFromString(@"TestObject");
NSLog(@"cls:%@", cls);
// cls:(null)
没有这个类 😉?
0x01 实际类名
进入 Demo-Swift.h
文件查看
发现是这样的类名:_TtC10Demo10TestObject
SWIFT_CLASS("_TtC10Demo10TestObject")
@interface TestObject : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
既然是这个,那就用这个类名试试:
Class cls = NSClassFromString(@"_TtC10Demo10TestObject");
NSLog(@"cls:%@", cls);
// cls:Demo.TestObject
这下有了
不过居然把项目名用来当前缀了 😉
0x02 修改类名
使用 @objc
关键字
在 TestObject.swift
文件中这样使用
@objc(TestObject)
class TestObject: NSObject {
}
这样在OC
文件中使用时,类名
跟 文件名
就一致了
Class cls = NSClassFromString(@"TestObject");
NSLog(@"cls:%@", cls);
// cls:TestObject