c++ - 如何在不使用 objective-c 运行时的情况下在 Swift 中按名称实例化类

标签 c++ objective-c swift dynamic instantiation

是否可以创建一个 Swift 类的实例,给定类的名称作为字符串?这应该适用于所有类,包括用户定义的类,而不仅仅是默认类型。

据我所知,这在纯 Swift 中是不可能做到的。由于该语言是静态类型的,因此在编译时需要知道所有类类型。但是,有多个来源展示了如何使用动态的 Objective-C 运行时来完成此操作。

我的解决方案需要在 Linux 上运行,而目前 Objective-c 运行时不适用于 Linux 上的 Swift。如果传递包含类名的字符串,是否可以编写一个 c/c++ 函数返回一个 Swift 类的实例?还是语言/编译器的设计/结构禁止这样做?

最佳答案

目前这在纯 Swift 中是不可能的。不是因为 Swift 是“静态类型”,而是因为它还没有被实现。当使用 Objective C 运行时(是动态的,是的)执行此操作时,您需要提供编译器静态类型信息。程序中只有非常有限的部分具有动态行为。从某种意义上说,编译器的工作之一是通过要求您使用显式强制转换对运行时行为进行编译时断言,从而要求您回到静态类型彩虹和安全蝴蝶的领域。

我可能是错的,但我认为没有针对此的 C/C++ 解决方法。最终,您需要某种运行时系统,了解所有加载的类,可以按名称查询。为此,Swift 依赖于 Objective C 运行时。

反射是 Swift 的一个目标,开发团队表示他们已经增加了 Swift 3 中包含的反射元数据。他们致力于增加 Swift 中的反射功能。 Swift 目前正在快速发展,实现 Swift 的团队发现反射的优先级低于其他目标(条件一致性、改进的泛型、ABI 稳定性、API 指南标准化等)。

关于c++ - 如何在不使用 objective-c 运行时的情况下在 Swift 中按名称实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39990248/

相关文章:

c++ - 如何同时存储unicode字符并将其输出到文件中?

c++ - 查找包含值的单元格的索引并突出显示 QTableView 中的所有这些单元格

iphone - 处理报亭下载的内容

objective-c - 动画 CAShapeLayer 大小变化

Swift 3 升级 : Type 'Dictionary<NSObject, AnyObject>?' has no subscript members

swift - 使用 Swift 处理 Firestore 上的对象字段

ios - 如何在字典循环中获取键、值和索引?

c++ - 获取 QString 长度(以字符为单位,而不是字节)

c++ - 检测到 QT UTC linux 时钟偏差。您的构建可能不完整

ios - Xcode 如何检测一个 View 的属性改变了?