最近在学习swift,我以前是写C#的,后来才转的OC,所以经常会抱怨为啥OC没有泛型呀。现在swift出来了,而且还支持泛型,但是我实在忍不住要吐槽swift下了。
事情是这样的,我们做应用的数据基本都是从服务端获取的,服务端返回的数据也基本都是json格式返回的,然后在客户端把json数据先转成字典或数组。有的项目是直接把转换好的josn字典胡数组拿来用,而大多数的项目应该是进一步的封装,把json数据转换成相应的类实例,这个过程我叫做DTO(data to object)。那怎么把json数据转换后的字典或数组转换成对应的类的实例呢?这里就会用到反射技术了,首先是根据类的名称动态生成对象实例,然后对类的各个属性赋值,而这个赋值的过程也有两种方式,一种是直接使用setValuesForKeysWithDictionary赋值,另外一种是使用反射把类的属性列表给反射出来,然后使用kvc赋值,我再项目中使用的是反射技术。
以上的DTO过程移植到swift中原理也一样,无非就是反射的方法不一样,但具体的原理是一样的。而我遇到的问题出在哪里呢?就出在泛型上面。我先举个例子,看下面代码
class ClassGeneric<T> { var property:T? }
在swift中是可以这样写的, 而这样的代码在C#中也差不多的。为什么这样写,我想用过泛型类的朋友对这样的写法是不会陌生的,但是这样的泛型类在swift中却不支持kvc,如果你用kvc来设置属性的话运行时会报"this class is not key value coding-compliant"。直接把我想通过泛型来做DTO的想法给断了。
另外一个我想吐槽的是swift的反射实在是太弱了,能做的事情太少了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2012-08-28 Windows 8 Metro开发疑难杂症(五)——DataGrid控件