关于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)
*/

上一篇下一篇

猜你喜欢

热点阅读