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)
class TestObject: NSObject {
}
Class cls = NSClassFromString(@"TestObject");
NSLog(@"cls:%@", cls);
// cls:TestObject