当前位置: 首页 > 科技观察

运行时反射

时间:2023-03-20 21:33:38 科技观察

源码介绍:1.这个框架是做什么的?.这个框架可以理解为MJExtension的Swift版,主要实现类反射,在实现反射功能的基础上实现字典-模型一键互转!MJExtension(OC):https://github.com/CoderMJLee/MJExtension2。这个框架是MJExtension的纯Swift翻译吗?.No,虽然两者的功能一样,但是底层是完全不同的。反射中的基本代码没有相似之处,但最终的功能和效果是一样的。在字典和模型一键转换这一点上,思路是一样的,都是在反射函数上实现的。3.Swift有Runtime吗?.OC里面的Runtime在Swift里面测试了很多次,发现可以用(但是结果比较奇怪),但是Swift底层比较大,而且Swift本身也不提倡Runtime运行时机制.在Swift中,叫做Reflect反射,基本上可以认为Runtime不好用。4.为什么框架命名为CFRuntime?.CF是查林冯的缩写。我知道Swift有全名空间,不需要前缀,但由于OC的历史,我还没有改掉这个习惯。Runtime主要是喜欢OC的这个特性。就算Swift叫Reflect,但个人还是想延续经典。5.它支持Swift中的结构吗?.不支持,基于以下两个原因:Structures主要用于数据结构,是值类型。大数据最好使用引用类型类。从继承的角度来说,继承NSObject就已经说明问题了。6.框架是怎么写的?.这个问题比较全面,因为我公司的官方项目都是基于Swift的,但是我个人过于依赖MJExtension,同时写了很多扩展框架,对这个框架的需求很迫切!最近也在研究Reflect。在参考了大量国外资料和其他人的作品,结合MJExtension的概念,从昨晚(2015.07.1019点)开始连续工作了20多个小时才写出这个框架,力求集成API和MJExtension。保持高度的一致性,只要会用MJExtension,马上就会上手CFRuntime!源码截图:源码片段:classPerson:NSObject,Printable{//String定义为optionalvarname:NSString?//Int,CGFloat,Float,Double,Bool一定不能定义为optionalvarage:Int=0varage2:NSInteger=0varweight:Float=0varweight2:CGFloat=0varmoney:Double=0varisLikeStudy:Bool=falsevarcat:Cat=Cat()overridevardescription:String{return"name=\(name),age=\(age),age2=\(age2),weight=\(weight),weight2=\(weight2),money=\(money),isLikeStudy=\(isLikeStudy),\n\ncat=\(cat)"}}下载地址:http://down.51cto.com/数据/2069809