iOS開發(fā) 字典->模型(runtime)

1.新建NSObject的分類(Model)
2.在NSObject+Model.h文件中聲明一下函數(shù):

+ (instancetype)modelWithDict:(NSDictionary *)dict;

3.在NSObject+Model.m文件中實現(xiàn)函數(shù)庆捺,代碼如下:

#import "NSObject+Model.h"
#import <objc/message.h>
@implementation NSObject (Model)
+ (instancetype)modelWithDict:(NSDictionary *)dict
{
    // 創(chuàng)建一個模型對象(由于不知道模型具體的類型,選擇使用id)
    id objc = [[self alloc] init];
    
    unsigned int count = 0;
    
    // 獲取成員變量數(shù)組
    Ivar *ivarList = class_copyIvarList(self, &count);
    
    // 遍歷所有成員變量
    for (int i = 0; i < count; i++) {
        
        // 獲取成員變量
        Ivar ivar = ivarList[i];
        
        // 獲取成員變量名稱
        NSString *ivarName = [NSString stringWithUTF8String:ivar_getName(ivar)];
        
        // 獲取成員變量類型
        NSString *type = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];
        
        // 注:此時輸出的type == @"@\"User\"";需轉(zhuǎn)換為@"User"
        
        //  @"@\"User\"" -> @"User"
        type = [type stringByReplacingOccurrencesOfString:@"@\"" withString:@""];
        type = [type stringByReplacingOccurrencesOfString:@"\"" withString:@""];
        
        // 成員變量名稱轉(zhuǎn)換key  _user===>user
        NSString *key = [ivarName substringFromIndex:1];
        
        // 從字典中取出對應value dict[@"user"] -> 字典
        id value = dict[key];
        
        // 二級轉(zhuǎn)換
        // 當獲取的value為字典時,且type是模型
        // 即二級模型
        if ([value isKindOfClass:[NSDictionary class]] && ![type containsString:@"NS"]) {
            
            // 獲取對應的類
            Class className = NSClassFromString(type);
            
            // 字典轉(zhuǎn)模型
            value = [className modelWithDict:value];
            
        }
        // 給模型中屬性賦值
        if (value) {
            [objc setValue:value forKey:key];
        }
        
    }
    
    return objc;
}
@end

4.使用在要使用的文件中導入NSObject+Model.h文件滔以,創(chuàng)建一個測試的繼承NSobject的TestModel類
下面是測試的代碼:
TestModel.h

#import "NSObject+Model.h"

@interface TestModel : NSObject
@property (nonatomic,strong) NSString *avatarUrl;
@property (nonatomic,strong) NSString *nickname;
@property (nonatomic,strong) NSString *content;
@property (nonatomic,strong) NSString *type;
@property (nonatomic,strong) NSString *time;
@end

使用你画,代碼如下:

-(void)test{
    NSDictionary *dic=@{
                        @"avatarUrl":@"http://img.zcool.cn/community/017274582000cea84a0e282b576a32.jpg",
                        @"nickname":@"nickname",
                        @"content":@"input you nickname",
                        @"type":@"1",
                        @"time":@"2017-12-10"
                        };
    TestModel *model =[TestModel modelWithDict:dic];
   
    NSLog(@"%@",model.nickname);
    
}

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坏匪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子敦迄,更是在濱河造成了極大的恐慌,老刑警劉巖苦囱,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脾猛,死亡現(xiàn)場離奇詭異猛拴,居然都是意外死亡,警方通過查閱死者的電腦和手機愉昆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撼唾,“玉大人廉邑,你說我怎么就攤上這事〉构龋” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵糙箍,是天一觀的道長渤愁。 經(jīng)常有香客問我,道長深夯,這世上最難降的妖魔是什么抖格? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮咕晋,結(jié)果婚禮上雹拄,老公的妹妹穿的比我還像新娘掌呜。我一直安慰自己滓玖,他們只是感情好,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布质蕉。 她就那樣靜靜地躺著势篡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪模暗。 梳的紋絲不亂的頭發(fā)上禁悠,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音兑宇,去河邊找鬼碍侦。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的瓷产。 我是一名探鬼主播比规,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拦英!你這毒婦竟也來了蜒什?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疤估,失蹤者是張志新(化名)和其女友劉穎灾常,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铃拇,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡端考,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了灌曙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片口柳。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖显晶,靈堂內(nèi)的尸體忽然破棺而出贷岸,到底是詐尸還是另有隱情,我是刑警寧澤磷雇,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布偿警,位于F島的核電站,受9級特大地震影響唯笙,放射性物質(zhì)發(fā)生泄漏螟蒸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一崩掘、第九天 我趴在偏房一處隱蔽的房頂上張望七嫌。 院中可真熱鬧,春花似錦苞慢、人聲如沸诵原。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽皮假。三九已至,卻和暖如春骂维,著一層夾襖步出監(jiān)牢的瞬間惹资,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工航闺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留褪测,地道東北人猴誊。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像侮措,于是被迫代替她去往敵國和親懈叹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉分扎,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,715評論 0 9
  • 簡書作者(楠天下的太陽花)授權(quán)發(fā)布此文章澄成。 01 前面有文章,說到變現(xiàn)能力畏吓。今天特別講技能的變現(xiàn)墨状,用金融術(shù)語,就是...
    投資家說閱讀 362評論 0 2
  • 06 談及三毛,我的心里總是有些復雜宏悦。 我愛她的文字镐确,高中時代那些輾轉(zhuǎn)反側(cè)的夜里我就會翻開她的書來,好像失眠患者定...
    大病初愈閱讀 526評論 1 5
  • 今天下午饼煞,兒子要去學校學習源葫,我像往常一樣早早穿好衣服,拿上車鑰匙派哲,準備開車送兒子去臼氨。 出乎意料,兒子堅決...
    狄克先生閱讀 303評論 0 9