Swift 使用 NSClassFromString 遇到的大坑

来源:互联网 发布:湖畔网络 编辑:程序博客网 时间:2024/04/27 08:19

swift 中NSClassFromString的使用:
在swift中使用NSClassFromString时候 会常遇到这样的一个报错:unexpectedly found nil while unwrapping an Optional value
这是你的参数写错了的原因。
首先 NSClassFromString 在swift中 的参数不只是一个单独的类字符串,而是一个完整的包名加类名组成的字符串,也就是包类名字符串.也就是说需要在类名的前面加上你的工程名字 代码如下:

//获取包名    func getAPPName() -> String{        let nameKey = "CFBundleName"        let appName = Bundle.main.object(forInfoDictionaryKey: nameKey) as? String   //这里也是坑,请不要翻译oc的代码,而是去NSBundle类里面看它的api        return appName!    } let targetVC = VCdataArr[indexPath.row] as String        /**         * 如果你的工程名字中带有“-” 符号  需要加上 replacingOccurrences(of: "-", with: "_") 这句代码把“-” 替换掉  不然还会报错 要不然系统会自动替换掉 这样就不是你原来的包名了 如果不包含“-”  这句代码 可以不加         */        let APPName = getAPPName().replacingOccurrences(of: "-", with: "_")        let ClassName:NSString = APPName + "." + targetVC as NSString        guard let Cls = NSClassFromString(ClassName as String)! as? UIViewController.Type  else{            NSLog("无法转换成UITableViewController")            return        }        let VC:UIViewController = Cls.init()        VC.title = dataSources[indexPath.row]        self.navigationController?.pushViewController(VC, animated: true)

这样就能运行OK了!

原创粉丝点击