swift 动态获取类, 获取命名空间
2016-03-24 22:02
218 查看
在做swift开发中很多时候会动态加载控制器的类, 可以让app更加灵活显示界面信息
一般情况下都是服务器返回显示的控制器类name然后动态显示, 但是服务器返回的类name是string, 怎么转换成class类型呢
swift里还有一个概念就是命名空间, 一个类打印出来是由[命名空间.类名]组成所以怎么活的命名空间
首先我们看看如果一个类被打印出来是什么
我在代码中输入如下代码
打印出来的结果是这个样子
![](webkit-fake-url://eef98018-ff47-4ca2-be2c-86f1fd2f207f/image.tiff)
由此可见在swift中如果打印一个类结构: 命名空间.类名
命名空间是大多数语言都有的一种语法, C#/Java/C++等语言都是有的
命名空间在swift中是能被修改的
![](webkit-fake-url://37b1294f-39f7-44cc-b532-9e89e699f85c/image.tiff)
如果想获取命名空间可以获取对应info.plist文件
![](webkit-fake-url://91765b68-421a-46a6-bb45-9a44084df139/image.tiff)
代码:
所以说我们想把一个字符串转换成一个类, 也应该是这个格式的才能转换过去, 字符串转换成类的代码如下
2次打印的结果
一般情况下都是服务器返回显示的控制器类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次打印的结果
相关文章推荐
- swift学习入门笔记1
- Swift实现断点续传,Demo简单易懂,没有太多复杂模块和逻辑,完整体现断点续传的原理
- swift系统学习控件篇:UIbutton+UIlabel+UITextField+UISwitch+UISlider
- swift约束之SnapKit的使用方式
- Swift与C char*
- Swift 中 callback 调用
- Swift中C的Block的调用
- Swift-'as?','as'用法
- swift 单例
- swift switch
- Swift-'!','?'用法
- Swift-Debug下打印函数名和行数
- 自主学习之RxSwift(一) -----Driver
- 自主学习之RxSwift(一) -----Driver
- swift !?
- Swift语法
- swift2.2的新特性
- RxSwift:ReactiveX for Swift 翻译
- RxSwift:ReactiveX for Swift 翻译
- ios/swift上传代码到CocoaPods