美文网首页
Swift:获取命名空间(namespace)

Swift:获取命名空间(namespace)

作者: 愿你年年多聚无离散 | 来源:发表于2017-11-27 14:00 被阅读0次

部分内容参考:
http://www.jianshu.com/p/f2503afff164

一、打印namespace

在任意一个控制器的viewDidLoad()方法中打印self,打印结果是:


GSYswift.png

如图,GSYswift 就是namespace,默认为项目名(我的已经更改过了,原因在后文)

二、查看namespace

Info文件.png
任意行点击右键,勾选上选中的选项,即可看到 CFBundleName

三、修改namespace

当需要修改命名空间的时候,如图


修改namespace.png

四、为什么要修改?

这也是我写本文的主要原因:
命名空间不可以有横线!

示例.png
我的项目名称中是中英文混写并且有-横线的,而这就导致通过guard let 保护的时候,每次都会进入return。后来经过试验,发现命名空间有问题,经过测试后发现不可以加横线,纯英文可以,纯中文可以,中英混写也可以(我的是xcode8.2,别的混写不知道可不可以,但尽可能别混写=。=),但就是加了横线,导致cls为空,就一直return了。

五、如何代码获取命名空间名称,并创建相应的类

// 从info.plist读取namespace
let namespace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
// 拼接类名的完整格式,即namespace.类名,vcName即控制器的类名
let clsName = namespace + "." + vcName
let cls: AnyClass = NSClassFromString(clsName)!
// 得到相应的控制器
let vc = cls.alloc() as! UITableViewController

相关文章

网友评论

      本文标题:Swift:获取命名空间(namespace)

      本文链接:https://www.haomeiwen.com/subject/pwtdbxtx.html