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")
根据此处的文档:Using Swift With Cocoa and Objective-C
我们需要有完全限定的名称才能从 NSClassFromString()
例如如果目标名称是 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")