NSClassFromString使用Swift文件

5

我在现有的Objective-C项目中编写了一个Swift类。到目前为止,桥接工作得非常好。然而,我有一个方法,在其中使用NSClassFromString()在运行时生成一个类。当字符串是我的Swift类名时,它返回nil。

class MySwiftClass : NSObject {}

在Objective-C中:

Class myClass = NSClassFromString(@"MySwiftClass");

每次都会得到nil值,我也尝试了:

Class myClass = NSClassFromString(@"MyAppName.MySwiftClass");

但仍然是nil。


你尝试过另一种方式,看看NSStringFromClass对于MySwiftClass有何说法吗? - CodaFi
@CodaFi NSStringFromClass 可以使用。 - ahoang
2个回答

15

所有的 Swift 类都使用“产品模块名称”、“点”和类名来命名其名称空间(Module.Class)。如果您想在 Objective-C 代码中使用“MySwiftClass”类名,您可以添加 @objc(MySwiftClass) 注解来公开相同的 Swift 类名(不包括模块):

@objc(MySwiftClass)
class MySwiftClass{
    ...
}

然后

Class myClass = NSClassFromString(@"MySwiftClass");

将包含该类而不是为nil。


我的项目中出现了问题,不知道为什么这个不起作用,有什么想法吗? - szx

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];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接