最近在學習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