尽管 ListCell
是一个有效类,但以下代码打印出 nil
。
var lCellClass : AnyClass! = NSClassFromString("ListCell");
println(lCellClass);
文档说方法返回
The class object named by aClassName, or
nil
if no class by that name is currently loaded. If aClassName isnil
, returnsnil
.
我还尝试获取当前 viewcontroller 的 NSClassFromString()
,它已加载但仍然得到 nil
可能是什么问题?
更新:
即使尝试这样做 NSClassFromString("Array")
我仍然得到 nil
最佳答案
NSClassFromString
函数确实适用于(纯和 Objective-C 派生的)swift 类,但前提是您使用完全限定名称。
例如,在一个名为 MyApp
的模块中有一个名为 Person
的纯 swift 类:
let personClass: AnyClass? = NSClassFromString("MyApp.Person")
模块名称由“产品模块名称”(PRODUCT_MODULE_NAME
) build设置定义,通常与您的目标名称相同(应用了一些规范化,例如删除空格)。
这是非典型的,但是如果你正在加载的类在当前模块中并且你在编译时不知道模块名称,例如因为代码是作为多个目标的一部分编译的,所以您可以动态查找包名称,通常对应于模块名称:
let moduleName = Bundle.main.infoDictionary!["CFBundleName"] as! String
let personClass: AnyClass? = NSClassFromString(moduleName + "." + "Person")
但是我不推荐这样做,除非你在编译时真的不知道。
请参阅 Using Swift With Cocoa and Objective-C 中的在 Objective-C API 中使用 Swift 类名获取更多信息。
关于ios - NSClassFromString() 总是返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24570345/