Swift:獲取命名空間(namespace)

部分內容參考:
http://www.lxweimin.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
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容