关于swift中命名空间的问题
2018-04-13 本文已影响0人
best_su
不作死,不消停
当你的项目名字为: 1、xxxx-HD 或者 2、xxxx_HD的时候第一种你怎么找都找不到,因此一定不要使用第一种设置成项目的名字,第二中才是正解,或者不加其他的符号
先上代码
/// 类文件字符串转换为ViewController
///
/// - Parameter childControllerName: VC的字符串
/// - Returns: ViewController
func get_to_viewController(_ childControllerName: String) -> UIViewController?{
// 1.获取命名空间
// 通过字典的键来取值,如果键名不存在,那么取出来的值有可能就为没值.所以通过字典取出的值的类型为AnyObject?
guard let clsName = Bundle.main.infoDictionary!["CFBundleExecutable"] else {
print("命名空间不存在")
return nil
}
// 2.通过命名空间和类名转换成类
let cls : AnyClass? = NSClassFromString((clsName as! String) + "." + childControllerName)
print("cls", cls, "childControllerName", childControllerName)
// swift 中通过Class创建一个对象,必须告诉系统Class的类型
guard let clsType = cls as? UIViewController.Type else {
print("无法转换成UIViewController")
return nil
}
// 3.通过Class创建对象
let childController = clsType.init()
return childController
}
/*
如果你是第一种命名的话系统会给你变成xxxx_HD,但是你在打印clsName的时候就是xxxx-HD,因此,别用-,一定要用下划线呀
print("cls", cls, "childControllerName", childControllerName)
*/