Swift3.0 反射

来源:互联网 发布:南风知我意gl百度云 编辑:程序博客网 时间:2024/06/06 19:26

       反射的作用包括 

1、 使用NSClassFromString通过类名得到实例; (类型于Java的Class.forName和newInstance)

2、不知道对象包含哪些属性,使用Mirror得到属性值; (类似于Java的getDeclaredFileds函数)


 得到实例分为3步(PS:跟Java很像,大道同源): 

1、 得到应用名称;

2、 得到类的完整路径, 注意分隔符是小数点;并判断数据类型是否符合预期。 备注: as?后面的格式是类名.Type, cls可能是nil。

3、 调用init函数实例化;

let nameSpace = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as! String  //得到应用名称guard let cls = NSClassFromString(nameSpace + "." + clsName) as? UIViewController.Type else { return }  //得到类完整路径let vc = cls?.init()

使用Mirror显示出对象的所有属性值(在JSON解析时会用到):

struct Book {    let name: String?    let price: Int    let page: Int}let book = Book(name: nil, price: 10, page: 200)let mirror = Mirror(reflecting: book)for case let(key?, value) in mirror.children {    print("key:\(key), value: \(value)")    //打印成员属性}print(mirror.subjectType)    //反射对象的数据类型

输出:

key:name, value: nilkey:price, value: 10key:page, value: 200Book



0 0
原创粉丝点击