天天看點

Swift OC引入swift檔案後,擷取類名錯誤

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