ios - NSClassFromString() 总是返回 nil

标签 ios xcode ios7 xcode5 swift

尽管 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 is nil, returns nil.

我还尝试获取当前 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/

相关文章:

ios - 关于将光标位置放置在空文本字段中的查询

ios - UIView 中的 UIButton 目标操作

xcode - 在 Xcode 6.3 中分离所有工作副本并重置所有版本历史记录

ios - 更改自定义 uibarbuttonitem 的颜色(iOS7)

ios7 - 是否可以在 iOS 7 中使用 View 的 CALayer 在 subview Controller 后面绘制阴影

ios - xcode6 beta7 prepareForSegue 抛出 EXC_BAD_ACCESS

iPhone 应用程序 : In App Purchase

iOS - 如何在 swift 中使用 `NSMutableString`

ios - 使用通过 StartupItem 作为 mac osx slave 启动的 jenkins 摆脱钥匙串(keychain)列表中的重复系统钥匙串(keychain)

UITextView 中的 iOS7 拼写检查错误