duwenquan-方形LOGO.png
引述
在上一篇中我們講述了利用Runtime字典轉(zhuǎn)模型的一級(jí)轉(zhuǎn)化拴鸵,但是,我們發(fā)現(xiàn)止吐,在我們的模型中宝踪,還是存在字典,如何再將其轉(zhuǎn)化成模型呢碍扔?其實(shí)原理很簡(jiǎn)單瘩燥,既然已經(jīng)做過(guò)一級(jí)轉(zhuǎn)換,想實(shí)現(xiàn)二級(jí)轉(zhuǎn)化不同,再調(diào)用一次一級(jí)轉(zhuǎn)換的方法不就解決了嗎厉膀?
二級(jí)轉(zhuǎn)換步驟:
1溶耘,將模型中的NSDictionary轉(zhuǎn)化為模型類,首先要再創(chuàng)建一個(gè)模型類服鹅,例子中為User凳兵,然后聲明屬性
2,在一級(jí)模型中引入二級(jí)模型的頭文件企软,將NSDictionary替換為 User
3庐扫,在NSObject+Model的類方法中,我們賦值之前做判斷仗哨,將字典再次進(jìn)行模型轉(zhuǎn)換
4形庭,我們考慮的是遇到字典就轉(zhuǎn)換,但是也要考慮有些字典不需要轉(zhuǎn)換厌漂,那么我們要加以判斷【 /值是字典,成員屬性的類型不是字典,才需要轉(zhuǎn)換成模型】
if ([value isKindOfClass:[NSDictionary class]] && ![propertyType containsString:@"NS"]) {
// 需要字典轉(zhuǎn)換成模型
}
- 5,獲取類名萨醒,但是通過(guò)打印得知propertyType帶有@和轉(zhuǎn)義字符,此時(shí)需要截取
// @"@\"User\"" User
NSRange range = [propertyType rangeOfString:@"\""];
propertyType = [propertyType substringFromIndex:range.location + range.length];
// User\"";
range = [propertyType rangeOfString:@"\""];
propertyType = [propertyType substringToIndex:range.location];
- 6,然后根據(jù)類名轉(zhuǎn)換成類對(duì)象
Class modelClass = NSClassFromString(propertyType);
- 7,再次調(diào)用字典轉(zhuǎn)模型的方法實(shí)現(xiàn)二級(jí)轉(zhuǎn)換
if (modelClass) {
value = [modelClass modelWithDict:value];
}
效果展示:
二級(jí)轉(zhuǎn)換.png
從斷點(diǎn)得知苇倡,我們已經(jīng)成功將User這個(gè)字典做了二級(jí)轉(zhuǎn)換富纸。
Runtime字典轉(zhuǎn)模型【二級(jí)轉(zhuǎn)換】Demo
DWQRuntime字典轉(zhuǎn)模型(二級(jí)轉(zhuǎn)換)
小伙伴們多多支持,給文章點(diǎn)個(gè)喜歡旨椒,在GitHub上給喜歡的開(kāi)源庫(kù)一個(gè)Star噢晓褪!