runtime之字典轉(zhuǎn)模型

runtime可以做很多事情核无,這里不一一列舉吱型。很多三方庫(kù)都是通過(guò)runtime來(lái)完成字典轉(zhuǎn)模型大體思路如下:

1. 遍歷模型中的屬性,然后拿到屬性名作為鍵值去字典中尋找值.

2. 找到值后根據(jù)模型的屬性的類型將值轉(zhuǎn)成正確的類型

3.利用kvc完成屬性的賦值


第一步:遍歷模型中的屬性,然后拿到屬性名作為鍵值去字典中尋找值

我們可以通過(guò)一個(gè)分類來(lái)獲取所有屬性

獲取對(duì)象屬性及屬性類型

上面這些類型,是類型編碼,在蘋果文檔中告訴了我們編碼對(duì)應(yīng)的類型:


類型編碼

根據(jù)圖表,我們將常用的幾個(gè)編碼定義成常量字符串或者宏表示它所對(duì)應(yīng)的類型

類型關(guān)系對(duì)應(yīng)

設(shè)置屬性類型type


設(shè)置屬性type

然后進(jìn)行下一步----2.用該屬性名作為鍵去字典中尋找對(duì)應(yīng)的值.

id value = [keyValues valueForKey:property.name];

if(!value)continue;

接下來(lái)是第三步:3.拿到值后將值的類型轉(zhuǎn)換為屬性對(duì)應(yīng)的數(shù)據(jù)類型.

if(type.isNumberType){ if([valueisKindOfClass:[NSStringclass]])value= [[[NSNumberFormatter alloc]init] numberFromString:value];}

其中有一種情況,是需要進(jìn)行特殊處理的.當(dāng)模型的屬性是char類型或者bool類型時(shí),獲取到的編碼都為c,并且bool還有可能是B編碼,它們都對(duì)應(yīng)_boolType.因?yàn)閿?shù)字類型包含布爾類型,所以bool類型要在數(shù)字類型的條件下進(jìn)行額外判斷.

if(type.isNumberType){? ? ? ? ? ? NSString *oldValue = value;// 字符串->數(shù)字if([valueisKindOfClass:[NSStringclass]]){value = [[[NSNumberFormatter alloc] init]numberFromString:value];if(type.isBoolType) {? ? ? ? ? ? ? ? ? ? NSString *lower = [oldValue lowercaseString];if([lowerisEqualToString:@"yes"] || [lowerisEqualToString:@"true"] ) {? ? ? ? ? ? ? ? ? ? ? ? value =@YES;? ? ? ? ? ? ? ? ? ? }elseif([lowerisEqualToString:@"no"] || [lowerisEqualToString:@"false"]) {? ? ? ? ? ? ? ? ? ? ? ? value =@NO;? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? }

然后處理其他類型轉(zhuǎn)成字符串類型的情況.

else{if(typeClass == [NSStringclass]) {if([valueisKindOfClass:[NSNumberclass]]) {if(type.isNumberType)// NSNumber -> NSStringvalue= [valuedescription];? ? ? ? ? ? ? ? }elseif([valueisKindOfClass:[NSURLclass]]){// NSURL -> NSStringvalue= [valueabsoluteString];? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? }

KVC賦值

[self setValue:value forKey:property.name];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沃呢,隨后出現(xiàn)的幾起案子徘层,更是在濱河造成了極大的恐慌,老刑警劉巖拴驮,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異柴信,居然都是意外死亡套啤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門随常,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)潜沦,“玉大人,你說(shuō)我怎么就攤上這事绪氛∷艏Γ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵枣察,是天一觀的道長(zhǎng)争占。 經(jīng)常有香客問(wèn)我燃逻,道長(zhǎng),這世上最難降的妖魔是什么臂痕? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任伯襟,我火速辦了婚禮,結(jié)果婚禮上握童,老公的妹妹穿的比我還像新娘姆怪。我一直安慰自己,他們只是感情好澡绩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布稽揭。 她就那樣靜靜地躺著,像睡著了一般肥卡。 火紅的嫁衣襯著肌膚如雪溪掀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天步鉴,我揣著相機(jī)與錄音膨桥,去河邊找鬼。 笑死唠叛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沮稚。 我是一名探鬼主播艺沼,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蕴掏!你這毒婦竟也來(lái)了障般?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盛杰,失蹤者是張志新(化名)和其女友劉穎挽荡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體即供,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡定拟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逗嫡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片青自。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖驱证,靈堂內(nèi)的尸體忽然破棺而出延窜,到底是詐尸還是另有隱情,我是刑警寧澤抹锄,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布逆瑞,位于F島的核電站荠藤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏获高。R本人自食惡果不足惜哈肖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谋减。 院中可真熱鬧牡彻,春花似錦、人聲如沸出爹。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)严就。三九已至总寻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梢为,已是汗流浹背渐行。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铸董,地道東北人祟印。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像粟害,于是被迫代替她去往敵國(guó)和親蕴忆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容