【发布时间】:2017-02-20 18:17:53
【问题描述】:
如果给定类名作为字符串,是否可以创建 Swift 类的实例?这应该适用于所有类,包括用户定义的,而不仅仅是默认类型。
据我了解,这在纯 Swift 中是不可能做到的。由于语言是静态类型的,所有类类型都需要在编译时知道。但是,有几个来源展示了如何使用动态的 Objective-C 运行时来完成此操作。
我的解决方案需要在 Linux 上运行,而现在 Objective-c 运行时不适用于 Linux 上的 Swift。如果传递一个包含类名的字符串,是否可以编写一个 c/c++ 函数来返回一个 Swift 类的实例?还是语言/编译器的设计/结构禁止这样做?
【问题讨论】:
-
我怀疑这可能是XY problem 的情况。你需要这个做什么?
-
我们的目标是能够解析包含类型信息的自定义对象表示法,并使用该对象表示法在 Swift 中动态创建类实例。
-
如果我可能会问,为什么不使用现有的对象序列化技术?
-
我们希望能够获取一个字符串并自动将其解析为一个类实例供程序员使用。我们正在寻求为端到端 Swift 应用程序构建一个 Web 框架,并且我们正在为该框架创建一个自定义对象表示法。作为对象表示法的一部分,为了方便程序员,我们希望在读入对象表示法文件时自动实例化自定义类。
-
是否需要使用自定义符号?核心数据、NSArchiver 和许多可用的 ORM 系统完全符合您的描述。
标签: c++ objective-c swift dynamic instantiation