使用Swift文件的NSClassFromString

aho*_*ang 3 objective-c-runtime swift objective-c-swift-bridge

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

class MySwiftClass : NSObject {}
Run Code Online (Sandbox Code Playgroud)

在Objective-C中:

Class myClass = NSClassFromString(@"MySwiftClass");
Run Code Online (Sandbox Code Playgroud)

而myClass每次都是零.我也尝试过:

Class myClass = NSClassFromString(@"MyAppName.MySwiftClass");
Run Code Online (Sandbox Code Playgroud)

仍然没有.

Osm*_*und 13

所有swift类都使用Product Module Name一个点和它们的命名空间的类名(Module.Class).如果您想在Objective-C代码中为类使用"MySwiftClass"名称; 你可以添加@objc(MySwiftClass)注释来公开相同的swift类名(没有模块):

@objc(MySwiftClass)
class MySwiftClass{
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后

Class myClass = NSClassFromString(@"MySwiftClass");
Run Code Online (Sandbox Code Playgroud)

将包含类而不是nil.