Swift3.0 反射

       反射的作用包括 

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 {
    private 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: nil
key:price, value: 10
key:page, value: 200
Book



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值