最近在学习swift,我之前是写C#的,后来才转的OC,因此常常会抱怨为啥OC没有泛型呀。如今swift出来了,并且还支持泛型,可是我实在忍不住要吐槽swift下了。json
事情是这样的,咱们作应用的数据基本都是从服务端获取的,服务端返回的数据也基本都是json格式返回的,而后在客户端把json数据先转成字典或数组。有的项目是直接把转换好的josn字典胡数组拿来用,而大多数的项目应该是进一步的封装,把json数据转换成相应的类实例,这个过程我叫作DTO(data to object)。那怎么把json数据转换后的字典或数组转换成对应的类的实例呢?这里就会用到反射技术了,首先是根据类的名称动态生成对象实例,而后对类的各个属性赋值,而这个赋值的过程也有两种方式,一种是直接使用setValuesForKeysWithDictionary赋值,另一种是使用反射把类的属性列表给反射出来,而后使用kvc赋值,我再项目中使用的是反射技术。swift
以上的DTO过程移植到swift中原理也同样,无非就是反射的方法不同,但具体的原理是同样的。而我遇到的问题出在哪里呢?就出在泛型上面。我先举个例子,看下面代码数组
class ClassGeneric<T> { var property:T? }
在swift中是能够这样写的, 而这样的代码在C#中也差很少的。为何这样写,我想用过泛型类的朋友对这样的写法是不会陌生的,可是这样的泛型类在swift中却不支持kvc,若是你用kvc来设置属性的话运行时会报"this class is not key value coding-compliant"。直接把我想经过泛型来作DTO的想法给断了。学习
另一个我想吐槽的是swift的反射实在是太弱了,能作的事情太少了。this