Swift:获取命名空间namespace,动态加载类

1. tips

1.1在swift中,类名的组成格式是 namespace.类名.比如我们在任意一个控制器的viewDidLoad()方法中打印self,打印结果是:
image

  • 这儿的Test就是namespace,默认的就是项目名.

2.怎么查看namespace

namespace在info.plist 对应的是 CFBundleExecutable,我们可以在info.plist中任意右击一行,选中Show Raw Keys/Values查看真实的key,如图
image

3.如何修改namespace

如果新建项目时,项目名称中包含有中文,可以进入是Build Settings中选中”All”, 搜索product name,即可修改,如图:
image

  • 这儿一定要记住:新改的名字不能含有中文,不能以数字开头,不能有-

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

1
2
3
4
5
6
7
// 从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