之前字典转模型都是用第三方框架做的,没有试过自己完全手写,感觉是个盲点,近期自己刚好试过自己去转一次,留下步骤好以后查看
如果接口文档不够详细,比如没有提供具体的字段类型,则可以把接收到的数据保存到plist文件中方便查看
[responseObject writeToFile:@"/xxx/result.plist" atomically:YES];
这时候再打开plist文件查看数据结构;一般而言有几个字典数据就需要创建相对应的模型类 如:
![这里写图片描述](https://img-blog.csdn.net/20160316210220609)
data数组下第一个元素就是字典,则此处需要创建
comment_list数组下面的元素也是字典,也需要创建,依次类推;
Data.h
@interface Data : NSObject
@property (nonatomic , copy)NSArray *comment_listArr;
@property (nonatomic , copy)NSString *head_url;
. . .
略
. . .
+ (id)dataFromResultDic:(NSDictionary *)dict;
在.m文件中实现该方法
+ (id)dataFromResultDic:(NSDictionary *)dict
{
return [[self alloc]initWithWithDict:dict];
}
- (id)initWithWithDict:(NSDictionary *)dict
{
if (self = [super init]) {
self.name = [dict objectForKey:@"name"];
self.head_url = [dict objectForKey:@"head_url"];
self.comment_listArr = [dict objectForKey:@"comment_list"];
NSMutableArray *commentArr = [NSMutableArray array];
for (NSDictionary *commentDic in self.comment_listArr) {
Comment *comment = [Comment commentWithCommentDic:commentDic];
[commentArr addObject:comment];
}
self.comment_listArr = commentArr;
}
return self;
}
当创建好模型后,就需要解析
NSArray *dataArr = [[result objectForKey:@"data"]objectForKey:@"parents_list"];
for (NSDictionary *dict in dataArr) {
//调用Data.h中提供的方法,一个个元素进行转换
Data *data = [Data dataFromResultDic:dict];
[self.objectArr addObject:data];
}
这里要重点说一下.m中的commet_listArr转换时使用的for循环(详情看注释)
//取出coment_list字段 注:这时候取出的数组里面存放的还是字典
self.comment_listArr = [dict objectForKey:@"comment_list"];
NSMutableArray *commentArr = [NSMutableArray array];
//对self.comment_listArr下的字典进行再转换
for (NSDictionary *commentDic in self.comment_listArr) {
//该类方法与data提供的类方法相似;
Comment *comment = [Comment commentWithCommentDic:commentDic];
//在类方法中将字典里的数据转成基本数据类型后存入临时数组
[commentArr addObject:comment];
}
//再将该数组赋给全局属性(注意数组的深拷贝) 注:这时候数组中存放的是对象
self.comment_listArr = commentArr;
这时候从服务器拿来的字典数据就完全的转换成了模型,构建对象后可以很方便的用点语法将值取出