iOS 字典轉(zhuǎn)模型

字典轉(zhuǎn)模型


  • 1.簡(jiǎn)單的字典轉(zhuǎn)模型

-(instancetype)initWithDict:(NSDictionary *)dict

{

 if (self=[super init]) {

 self.name=dict[@"name"];

 self.icon=dict[@"icon"];

 //簡(jiǎn)單的字典轉(zhuǎn)模型可以直接采用KVC來轉(zhuǎn)

// [self setValuesForKeysWithDictionary:dict];

 }

 return self;

}

+(instancetype)carsWithDict:(NSDictionary *)dict

{

 return [[self alloc]initWithDict:dict];

}

  • 2.字典中包含數(shù)組
  • 2.1首先在頭文件創(chuàng)建一個(gè)數(shù)組包含子模型

  • 2.2在.m文件中將字典模型轉(zhuǎn)為車模型后存放入車模型數(shù)組中


/*分組 */

@interface AZCarGroup : NSObject

/*車模型數(shù)組 */

@property(nonatomic,strong)NSArray *cars;

/*組名*/

@property(nonatomic,copy)NSString *title;

-(instancetype)initWithDict:(NSDictionary *)dict;

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


-(instancetype)initWithDict:(NSDictionary *)dicts

{

 if (self=[super init]) {

 self.title=dicts[@"title"];

 //將字典數(shù)組中的字典轉(zhuǎn)為車模型存放到頭文件的數(shù)組中

 NSMutableArray *cars=[NSMutableArray array];

 for (NSDictionary *dict in dicts[@"cars"]) {

 AZCar *car=[AZCar carsWithDict:dict];

 [cars addObject:car];

 }

 self.cars=cars;

 }

 return self;

}

+(instancetype)carGroupWithDict:(NSDictionary *)dicts

{

 return [[self alloc]initWithDict:dicts];

}

  • 一般在使用我們的模型數(shù)據(jù)時(shí)采用懶加載方式加載

//所有車數(shù)據(jù)

-(NSArray *)carGroups

{

 if (_carGroups==nil) {

 //加載plist數(shù)據(jù)

 NSArray *dictArr=[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"cars.plist" ofType:nil]];

 //字典轉(zhuǎn)模型

 NSMutableArray *tempArray=[NSMutableArray array];

 for (NSDictionary *dict in dictArr) {

 AZCarGroup *carGroup=[AZCarGroup carGroupWithDict:dict];

 [tempArray addObject:carGroup];

 }

 self.carGroups=tempArray;

 }

 return _carGroups;

}

  • 3.MJExtension框架的使用

    • 首先導(dǎo)入框架

    • 確定Cars里面裝的AZCar模型

    • 將模型裝入數(shù)組

    • 框架的使用簡(jiǎn)化了復(fù)雜機(jī)械的字典轉(zhuǎn)模型操作

#import "MJExtension.h"


 //所有車數(shù)據(jù) 

-(NSArray *)carGroups

{

 if (_carGroups==nil) {

 //通過返回的字典確定cars數(shù)組中所裝的內(nèi)容為AZCar模型

 [AZCarGroup mj_setupObjectClassInArray:^NSDictionary *{

    return @{@"cars":[AZCar class]};

 }];

 _carGroups=[AZCarGroup mj_objectArrayWithFilename:@"cars.plist"];

 }

 return _carGroups;

}

  • 4.修改模型屬性類型
    /**
    [item setValue:@"中國" forKeyPath:@"name"];
     setValue:forKeyPath實(shí)現(xiàn)原理
     1.先查看有沒有對(duì)應(yīng)key值的set方法,如果有set方法,就會(huì)調(diào)用set方法,給對(duì)應(yīng)的屬性賦值
     2.如果沒有set方法,去查看有沒有跟key值相同并且?guī)в邢聞澗€的成員屬性.如果有的話,就給帶有下劃線的成員屬性賦值
     3.如果沒有跟key值相同并且?guī)в邢聞澗€的成員屬性,還會(huì)去找有沒有跟key值相同名稱的成員屬性.如果有,就給它賦值.
     4.如果沒有直接報(bào)錯(cuò).
     */```

//setValuesForKeysWithDictionary實(shí)現(xiàn)原理
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[item setValue:obj forKeyPath:key];
NSLog(@"%@--%@",key,obj);
}];

return item;

}

// 可以在set方法賦值前修改該屬性類型(運(yùn)行時(shí))
-(void)setIcon:(UIImage *)icon{

NSString *imageName = (NSString *)icon;
_icon =  [UIImage imageNamed:imageName];

}

-(void)setIcon:(NSString *)icon{

// NSString *imageName = (NSString *)icon;

_icon =  [UIImage imageNamed:icon];

}



最后編輯于
?著作權(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)容

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