iOS面試題收集(之MJExtension 字典轉(zhuǎn)模型)

MJExtension是一套字典和模型之間互相轉(zhuǎn)換的超輕量級框架

MJExtension能完成的功能

字典(JSON) --> 模型(Model)

模型(Model) --> 字典(JSON)

字典數(shù)組(JSON Array) --> 模型數(shù)組(Model Array)

模型數(shù)組(Model Array) --> 字典數(shù)組(JSON Array)

JSON array -> model array【字典數(shù)組轉(zhuǎn)成模型數(shù)組】

NSArray *dictArray = @[
                         @{
                             @"name" : @"Jack",
                             @"icon" : @"lufy.png"
                         },
                         @{
                             @"name" : @"Rose",
                             @"icon" : @"nami.png"
                         }
                     ];

// JSON array -> User array
NSArray *userArray = [User mj_objectArrayWithKeyValuesArray:dictArray];
// Printing
for (User *user in userArray) {
    NSLog(@"name=%@, icon=%@", user.name, user.icon);
}
// name=Jack, icon=lufy.png
// name=Rose, icon=nami.png

Model -> JSON【模型轉(zhuǎn)成字典】

// New model
User *user = [[User alloc] init];
user.name = @"Jack";
user.icon = @"lufy.png";

Status *status = [[Status alloc] init];
status.user = user;
status.text = @"Nice mood!";

// Status -> JSON
NSDictionary *statusDict = status.mj_keyValues;
NSLog(@"%@", statusDict);
/*
 {
 text = "Nice mood!";
 user =     {
 icon = "lufy.png";
 name = Jack;
 };
 }
 */

// More complex situation
Student *stu = [[Student alloc] init];
stu.ID = @"123";
stu.oldName = @"rose";
stu.nowName = @"jack";
stu.desc = @"handsome";
stu.nameChangedTime = @"2018-09-08";

Bag *bag = [[Bag alloc] init];
bag.name = @"a red bag";
bag.price = 205;
stu.bag = bag;

NSDictionary *stuDict = stu.mj_keyValues;
NSLog(@"%@", stuDict);
/*
{
    ID = 123;
    bag =     {
        name = "\U5c0f\U4e66\U5305";
        price = 205;
    };
    desc = handsome;
    nameChangedTime = "2018-09-08";
    nowName = jack;
    oldName = rose;
}
 */

常見用法

  • key替換蛇捌,比如ID和id
1.在模型類.m文件引入"MJExtension.h"
2.實現(xiàn)方法
+ (NSDictionary *)replacedKeyFromPropertyName {
    return @{@“非關(guān)鍵字的屬性名” : @“數(shù)組的key”};
}
+ (NSDictionary *)replacedKeyFromPropertyName{ // 模型的desc屬性對應(yīng)著字典中的description
    return @{@"desc" : @"description",@"ID" : @"id"};
}
方法將model文件中定義的字段名轉(zhuǎn)化為與請求數(shù)據(jù)中相同的,使兩者的內(nèi)部相同渴频,只是名稱不同

通過遇到有的字段是一個數(shù)組叫挟,數(shù)組中又存放了其他的數(shù)據(jù)模型對象刽沾,可以通過以下方法將其關(guān)聯(lián)

+(NSDictionary *)objectClassInArray{
    return @{@"businesses" : [Busnisses class]};
}

實例一<模型中還有模型數(shù)組>

.h文件
#import <Foundation/Foundation.h>
#import "HWFindHeaderseItem.h"

@interface HWFindResponseItem : NSObject

@property(nonatomic, strong) HWFindHeaderseItem *header; // 直接是字典 直接定義要轉(zhuǎn)的模型類型
@property(nonatomic, strong) NSArray *chics;    // 是模型數(shù)組 需要在.m文件中重寫objectClassInArray方法
@property(nonatomic, strong) NSArray *featured;
@end
.m文件
#import "HWFindResponseItem.h"
#import <MJExtension/MJExtension.h>
#import "HWFindChicsItem.h"
#import "HWFindFeaturesItem.h"

@implementation HWFindResponseItem

+ (NSDictionary *)objectClassInArray{
    return @{@"chics" : [HWFindChicsItem class], @"featured" : [HWFindFeaturesItem class]};
}
@end

實例二<模型中屬性與系統(tǒng)屬性同名>

.h文件
#import <Foundation/Foundation.h>

@interface HWFindHeaderseItem : NSObject

@property(nonatomic, strong) NSString *title;
@property(nonatomic, strong) NSString *desc; // 與系統(tǒng)屬性重名 需要在.m文件中重寫replacedKeyFromPropertyName告知
@property(nonatomic, strong) NSArray *photos;
@end
.m文件
#import "HWFindHeaderseItem.h"
#import <MJExtension/MJExtension.h>

@implementation HWFindHeaderseItem
+ (NSDictionary *)replacedKeyFromPropertyName{ // 模型的desc屬性對應(yīng)著字典中的description
    return @{@"desc" : @"description"};
}
- (void)setTitle:(NSString *)title {
    _title = title;
    NSLog(@"%@", title);
}
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沙咏,一起剝皮案震驚了整個濱河市融涣,隨后出現(xiàn)的幾起案子柬讨,更是在濱河造成了極大的恐慌扒接,老刑警劉巖伪货,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钾怔,居然都是意外死亡碱呼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門宗侦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愚臀,“玉大人,你說我怎么就攤上這事矾利」昧眩” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵男旗,是天一觀的道長舶斧。 經(jīng)常有香客問我,道長察皇,這世上最難降的妖魔是什么茴厉? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮什荣,結(jié)果婚禮上矾缓,老公的妹妹穿的比我還像新娘。我一直安慰自己溃睹,他們只是感情好而账,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著因篇,像睡著了一般泞辐。 火紅的嫁衣襯著肌膚如雪笔横。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天咐吼,我揣著相機與錄音吹缔,去河邊找鬼。 笑死锯茄,一個胖子當著我的面吹牛厢塘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肌幽,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼晚碾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了喂急?” 一聲冷哼從身側(cè)響起格嘁,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廊移,沒想到半個月后糕簿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡狡孔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年懂诗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苗膝。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡殃恒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荚醒,到底是詐尸還是另有隱情芋类,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布界阁,位于F島的核電站侯繁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泡躯。R本人自食惡果不足惜贮竟,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望较剃。 院中可真熱鬧咕别,春花似錦、人聲如沸写穴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啊送。三九已至偿短,卻和暖如春欣孤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昔逗。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工降传, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勾怒。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓婆排,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笔链。 傳聞我的和親對象是個殘疾皇子段只,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

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