我在现有的Objective-C项目中已经在Swift中编写了一个类。到目前为止,桥接工作非常顺利。我确实有一个方法,我在运行时使用NSClassFromString()生成一个类。当字符串是我的Swift类名时,它返回nil。
class MySwiftClass : NSObject {}
并在Objective-C中:
Class myClass = NSClassFromString(@"MySwiftClass");
和myClass每次都是零。我也试过了:
Class myClass = NSClassFromString(@"MyAppName.MySwiftClass");
仍然没有。
答案 0 :(得分:11)
所有swift类都使用Product Module Name一个点和它们的命名空间的类名(Module.Class)。如果你想使用" MySwiftClass" Objective-C代码中类的名称;你可以添加@objc(MySwiftClass)
注释来公开相同的swift类名(没有模块):
@objc(MySwiftClass)
class MySwiftClass{
...
}
然后
Class myClass = NSClassFromString(@"MySwiftClass");
将包含该类而不是nil。
答案 1 :(得分:0)
一种兼容Objective-C和Swift的方法:
CQBaseViewController *detailVC = [[NSClassFromString(controller_name) alloc] init];
// if nil,check as Swift file
if (!detailVC) {
NSString *prefix = [[NSBundle mainBundle] infoDictionary][@"CFBundleExecutable"];
NSString *swiftClassName = [NSString stringWithFormat:@"%@.%@", prefix, controller_name];
detailVC = [[NSClassFromString(swiftClassName) alloc] init];
}