swift 动态获取类, 获取命名空间

在做swift开发中很多时候会动态加载控制器的类, 可以让app更加灵活显示界面信息

一般情况下都是服务器返回显示的控制器类name然后动态显示, 但是服务器返回的类name是string, 怎么转换成class类型呢

swift里还有一个概念就是命名空间, 一个类打印出来是由[命名空间.类名]组成所以怎么活的命名空间

首先我们看看如果一个类被打印出来是什么

我在代码中输入如下代码

 let s = CCiPhone()
 print(s)

打印出来的结果是这个样子

由此可见在swift中如果打印一个类结构: 命名空间.类名

命名空间是大多数语言都有的一种语法, C#/Java/C++等语言都是有的

命名空间在swift中是能被修改的

如果想获取命名空间可以获取对应info.plist文件

代码:

NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"]!

所以说我们想把一个字符串转换成一个类, 也应该是这个格式的才能转换过去, 字符串转换成类的代码如下

        let className = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String + ".CCiPhone"
        let cls: AnyObject? = NSClassFromString(className)
        let clas = cls as! NSObject.Type!;
        
        let classType = clas.init()
        print(classType)
        
        let s = CCiPhone()
        print(s)

2次打印的结果

原文地址:https://www.cnblogs.com/MrTao/p/5317433.html