首页 > 学院 > 开发设计 > 正文

Swift3.0 反射

2019-11-09 15:35:13
字体:
来源:转载
供稿:网友

       反射的作用包括 

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表