swift有一个命名空间的概念, 所以不能像OC那样去转换, 我们可以打印下ViewController 就可以看出与OC的区别
print(ViewController()) //打印结果:<nameSpace.ViewController: 0x7fe04b70c890>
打印结果可以看出ViewController前面拼接了nameSpace. ,nameSpace就是这个工程的名字, 就是传说中的命名空间
那Swift中该怎么办呢? 下面我们
直接上代码:
// 1.动态获取命名空间
guard let nameSpace =Bundle.main.infoDictionary!["CFBundleExecutable"]as? String else{
return;
}
// 2.根据字符串获取对应的Class并转成控制器的类型
guard let className =NSClassFromString(nameSpace + "." + "ViewController")as? UIViewController.Type else{
return
}
// 3.创建对应的控制器对象
letvc = className.init()
print(vc) //打印结果:<nameSpace.ViewController: 0x7fe04b70c890>
可以看出 print(ViewController()) 和 print(vc) 结果是一样
网友评论