首页 > 解决方案 > 如何在 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
}

截图供参考

标签: swiftmacoscocoa

解决方案


你可以用

if viewInArray.isKind(of: MyClass) { ... } 

或者

if viewInArray.isMember(of: MyClass) { ... } // strict class match

但我不认为你可以转换为在 Swift 编译时不可用的类。无论如何,您将无法直接调用它的任何方法。不过,您可以将其转换为某个NSObject子类并向其发送任意(未在编译时定义)消息。


推荐阅读