源码简介:
1.这个框架是做什么的?.这个框架可以理解为MJExtension的Swift版本,主要是实现类反射, 并在实现反射功能的基础上实现字典-模型一键互转!
MJExtension(OC): https://github.com/CoderMJLee/MJExtension
2.这个框架是对MJExtension的纯Swift翻译吗?.不是的,虽然两者功能一致,但底层完全不一样。在反射这块上基本代码无任何相同点,只是最终功能效果一致。 在字典-模型一键互转这点上,思路是一致的,都是站在反射功能上实现。
3.Swift中有Runtime吗?.OC中的Runtime在Swift中经过我多次测试,发现是可以用的(但结果比较稀奇古怪),不过Swift底层发动比较大, 而且本身Swift已经不主张Runtime运行时机制,在Swift中是叫Reflect反射,基本可以认为Runtime已经不好用了。
4.框架为什么要命名为CFRuntime?.CF是Charlin Feng的缩写,我知道Swift有全名空间不需要前缀,但由于OC历史原因,暂时还没改过来这个习惯哈,Runtime主要是我非常这个OC这个特性,就算Swift叫Reflect,但我个人仍想延续经典。
5.是否支持Swfit中的结构体?.不支持,基于以下两点原因: 结构体主要用于数据结构,是值类型,大型数据使用引用类型的类更好。 从继承的角度来说,继承自NSObject,就已经说明问题。
6.框架是如何写出来的?.这个问题比较综合了,因为我公司正式项目已经全部Swift化,但个人对MJExtension依赖太深,同时写了大量延伸框架 ,对这套框架需求迫切!最近也在研究Reflect,在参考了国外大量资料和别人的作品,综合MJExtension的理念, 从昨天晚上(2015.07.10 19点)开始连续工作20多个小时写出了这套框架,力求API与MJExtension保持高度一致, 只要你会用MJExtension,你会马上上手CFRuntime!
源码截图:
源码片段:
- class Person: NSObject,Printable {
- //String 定义为可选
- var name: NSString?
- //Int、CGFloat、Float、Double、Bool 一定不能定义为可选
- var age: Int = 0
- var age2: NSInteger = 0
- var weight: Float = 0
- var weight2: CGFloat = 0
- var money: Double = 0
- var isLikeStudy: Bool = false
- var cat: Cat = Cat()
- override var description: String {
- return "name=\(name),age=\(age),age2=\(age2),weight=\(weight),weight2=\(weight2),money=\(money),isLikeStudy=\(isLikeStudy), \n\n cat=\(cat)"
- }
- }
下载地址:http://down.51cto.com/data/2069809