今天我们先抛开程序的整体观念,进入细节说说那些最令人讨厌的代码。说到最令人厌烦的代码,我看非数据处理莫属了,每次不管是新的客户端或者是程序的迭代升级,少不了或多或少的要写写解析网络数据代码。为什么说他令人讨厌呢?1、这部分工作都是简单重复。2、数量一般很多。3、代码很难复用。4、出错不容易发现。我可是忍他很久了。终于今天忍不住要数落数落他。简直就像恐龙留着口水要和你接吻一样!@#¥%(以上省略一万字的吐槽)
我决定写一个模块可以将数据解析简单化。首先我们知道来自网络的数据主流的格式有两种,1,XML。2、JSON。两个数据各有各的特点,这里我更倾向于使用JSON因为我觉得虽然他没有XML的可读性好,但是他拥有比较小的数据量,而且iOS对他有源生的支持,值得信赖,所以我选择我喜欢。
我们分析一下这个模块的需求。代码要可以复用,使用起来简单。那么输入参数就只能是越少越好,那就是一个字典加上生成的对象类型名,这两个参数就够了。(PS:没错你看的没有错只需要两个参数就足够了,可以实现。)object-c有一个特别有用的特性叫做动态运行时创建,它不只可以动态的创建你想要创建的类型,添加属性和方法还可以将类型中已经存在的属性名类型名以及方法名读取出来,这个模块的核心就是他。
整体的思路是:
首先,使用这个特性,将类名指向的类中所有的属性名及其类型读出,生成一个映射表和该类的实例。
然后,再根据映射表从传入字典中配合上委托和迭代,就可以使用KVC将字典中的值写入对象并返回。
以后如果再次编写类似功能时就可以让你轻松愉快的编码了。