swift - 如何在 Swift 中成功编译 NSClassFromString
问题描述
下面的代码无法编译成功。我还附上截图供参考!
func getXibViewWithClassNameString(classNameString:String)->AnyObject?{
let projectName = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String
let MyClass:AnyClass = NSClassFromString(projectName! + "." + classNameString)!
var viewArray:NSArray?
var xibView:AnyClass?
Bundle.main.loadNibNamed(classNameString, owner: nil, topLevelObjects: &viewArray)
for viewInArray in viewArray ?? [] {
if (viewInArray is MyClass){
xibView = viewInArray as MyClass
}
}
return xibView
}
解决方案
你可以用
if viewInArray.isKind(of: MyClass) { ... }
或者
if viewInArray.isMember(of: MyClass) { ... } // strict class match
但我不认为你可以转换为在 Swift 编译时不可用的类。无论如何,您将无法直接调用它的任何方法。不过,您可以将其转换为某个NSObject
子类并向其发送任意(未在编译时定义)消息。
推荐阅读
- javascript - 如何检查表单的有效性?
- excel - Excel中预测的嵌套IF问题
- caching - WSO2 Enterprise Integrator 6.3.0 缓存中介
- python - 如何通过读取工作表中的 excel 名称(使用 python)来创建文件夹?
- android - 使用 adb 禁用前台服务通知
- javascript - 为什么 this.$refs 在 Vue 子组件中未定义?
- c# - DataGridTextColumn 的条件工具提示
- r - 如何修复 R 中“object de type 'closure' non indiçable”的错误
- azure-cosmosdb - CosmosDB BulkExecutor 未显示 FailedImports
- google-analytics - 如何找到一个月内访问某个页面类型 x 次数的用户数?