自己動(dòng)手寫個(gè)MJExtension或者M(jìn)antle

iOS里面的模型映射的核心就是KVC。Let's start。

1。起源:你的App肯定有許多模型對(duì)象,但是如果都在這些模型對(duì)象里面,分別編寫KVC,那就麻煩了,所以,我們?cè)谶@里應(yīng)該寫個(gè)基類,來處理KVC,其他不同需求的事情交給子類。步驟1===》建立基于NSObject的類。我們叫做JSONModel

2。在JSONModel里面對(duì)外暴露一個(gè)方法:-(id)initWithDictionary:(NSDictionary *)dic;在這個(gè)方法里面,關(guān)鍵調(diào)用了一個(gè)方法,他就是 [self setValuesForKeysWithDictionary:dic],這個(gè)方法就是KVC,用來匹配類中與字典key同名的屬性。到這里KVC,核心字典轉(zhuǎn)模型對(duì)象就完成了。setValuesForKeysWithDictionary實(shí)際背后做了這幾個(gè)事情。他會(huì)調(diào)用這個(gè)方法:setKey1,setKey2,setKey3---,所以子類里面只需要實(shí)現(xiàn)setKey1,setKey2---之類的方法。最簡(jiǎn)單的做法就是,用@property? ? ? ? ? ? ? ? ? ? ? ? ? ? 步驟2===》在JSONModel.類里面實(shí)現(xiàn)-(id)initWithDictionary:(NSDictionary *)dic;方法里面的關(guān)鍵就是[self setValuesForKeysWithDictionary:dic]這句核心代碼 ? ? ? ? ? ? ? ? ? ? ? 步驟3===》建立基與JSONModel的模型對(duì)象類,頭文件就寫@,這些變量的名字要和傳入字典的key,他們名字要一致。

3.特殊處理。歷史原因就是fuck的后臺(tái)在返回的字典中,給我們一些這樣的字典 ? ? ? ? ? ? ?{@“id”: 1234, @"description":“這是第一個(gè)用戶”,@“imageUlr”:@“---”,----},那里面就有id,description,這2個(gè)key在轉(zhuǎn)模型對(duì)象的時(shí)候,在模型對(duì)象文件中,以“id”,@"descrption"做@property 名字就會(huì)有警告或者編譯出差的問題。所以就有了特殊處理。在服務(wù)器給你返回的字典中,與之對(duì)應(yīng)的對(duì)象模型類中,如果key里面有特殊關(guān)鍵字,首先,在@property里面名字改一下,比如userId, userDescription, 然后,你就再對(duì)象模型中多寫一個(gè)方法:- (void)setValue:(id)value forUndefinedKey:(NSString *)key{ if([key isEqualToString:@"id"] ) ?self.userid = value; ?if([key isEqualToString@"description"] ?self.userDescription = value) ?else ?[super ?setValue:value forKey:key] };

4.我聽說Mantle這個(gè)庫的關(guān)鍵部分就是上面的,不知道是不是真的。反正上面幫助你理解那些開源庫是有幫助的,后面怎么優(yōu)化,那就參考開源庫的源碼了?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,032評(píng)論 0 9
  • KVC(Key-value coding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iO...
    黑暗中的孤影閱讀 50,250評(píng)論 74 441
  • KVC(Key-value coding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iO...
    Fendouzhe閱讀 732評(píng)論 0 6
  • KVC(Key-value coding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iO...
    朽木自雕也閱讀 1,693評(píng)論 6 1
  • 一直很欣賞陳奕迅,他的歌聲總是能把我?guī)氲礁枨械膱?chǎng)景里,好像我也活在歌詞中的故事里一樣??吹骄W(wǎng)上有人說陳奕迅是一...
    球球的下午茶閱讀 758評(píng)論 4 3

友情鏈接更多精彩內(nèi)容