Swift 类 的 NSClassFromString 目标名称中包含 space

NSClassForString for Swift classes with target name having space in it

根据此处的文档:Using Swift With Cocoa and Objective-C 我们需要有完全限定的名称才能从 NSClassFromString()

获得 class

例如如果目标名称是 ABC 而 class 名称是 XYZ 我们通过调用 NSClassFromString(ABC.XYZ)

得到 class

但是,当目标名称中有 space 时,即当目标名称类似于 dummy target 时,我无法获得结果。在这种情况下,我们如何获得 class?

一个target名称有space个是有效的,如下图

完全合格的class名称

 <product_module_name>.<class_name>

目标名称可以包含空格(或其他特殊字符), 但模块名称不能,它必须是一个有效的标识符。这两个不必相同。

Xcode 当一个新目标是 创建。 如果目标名称是有效的模块名称,则两者将相等 默认。否则 Xcode 将用下划线替换无效字符。 产品模块名称也可以在构建设置中配置。

示例:

  • 目标名称:"My Target #2"
  • 产品模块名称:"My_Target__2"
  • Class 姓名:"MyClass"
  • 完全合格class 姓名:"My_Target__2.MyClass"

    let myClass: AnyClass? = NSClassFromString("My_Target__2.MyClass")