部分內(nèi)容參考:
http://www.reibang.com/p/f2503afff164
一、打印namespace
在任意一個(gè)控制器的viewDidLoad()方法中打印self,打印結(jié)果是:
如圖搁宾,GSYswift 就是namespace,默認(rèn)為項(xiàng)目名(我的已經(jīng)更改過了,原因在后文)
二井辜、查看namespace
任意行點(diǎn)擊右鍵,勾選上選中的選項(xiàng)管闷,即可看到
CFBundleName
三粥脚、修改namespace
當(dāng)需要修改命名空間的時(shí)候,如圖
四包个、為什么要修改刷允?
這也是我寫本文的主要原因:
命名空間不可以有橫線!
我的項(xiàng)目名稱中是中英文混寫并且有
-
橫線的赃蛛,而這就導(dǎo)致通過guard let 保護(hù)的時(shí)候恃锉,每次都會(huì)進(jìn)入return。后來經(jīng)過試驗(yàn)呕臂,發(fā)現(xiàn)命名空間有問題破托,經(jīng)過測(cè)試后發(fā)現(xiàn)不可以加橫線,純英文可以歧蒋,純中文可以土砂,中英混寫也可以(我的是xcode8.2,別的混寫不知道可不可以谜洽,但盡可能別混寫=萝映。=),但就是加了橫線阐虚,導(dǎo)致cls為空序臂,就一直return了。
五、如何代碼獲取命名空間名稱,并創(chuàng)建相應(yīng)的類
// 從info.plist讀取namespace
let namespace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
// 拼接類名的完整格式,即namespace.類名,vcName即控制器的類名
let clsName = namespace + "." + vcName
let cls: AnyClass = NSClassFromString(clsName)!
// 得到相應(yīng)的控制器
let vc = cls.alloc() as! UITableViewController