iOS中字典转模型的几种常用方式

   字典转模型主要由以下几种方式:

   第一种:在模型文件中只声明属性,字典转模型的整个过程暴漏在控制器中:

   AppModel的.h文件如下:

#import <Foundation/Foundation.h>

@interface AppModel : NSObject

@property(nonatomic,copy)NSString *icon;
@property(nonatomic,copy)NSString *name;

  

 此处只有声明属性,故而.m文件中不需要任何操作

  在控制器中进行字典转模型,为了节省内存,需要用数据时候再加载,故而选用懒加载的方式:

- (NSArray *)apps{
   
    if (_apps == nil) {
        //    1.获取全路径
        NSString *path =  [[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
        //     2.读取plist文件
       
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
        //     3.字典转模型
        NSMutableArray *tempArray = [NSMutableArray array];
        for (NSDictionary *dict in dictArray) {
            AppModel *appModel = [[AppModel alloc]init];
            appModel.icon = dict[@"icon"];
            appModel.name = dict[@"name"];
            [tempArray addObject:appModel];
           
           
        }
        _apps = tempArray;
       
    }
    return  _apps;
}

  

  第二种字典转模型封装在模型中,在模型文件中提供一个方法用来字典转模型,只需要在控制器中把数据传入即可。

   在AppModel.h文件中的声明:

 

  #import <Foundation/Foundation.h>

@interface AppModel : NSObject

@property(nonatomic,copy)NSString *icon;
@property(nonatomic,copy)NSString *name;
//提供一个方法出来用来字典转化模型
- ( instancetype)initWithDict:(NSDictionary *)dict;

+ ( instancetype)appModelWithDict:(NSDictionary *)dict;
@end

  

在AppModel.m文件中对模型文件中字典转模型的方法进行实现:

 #import "AppModel.h"

@implementation AppModel
- ( instancetype)initWithDict:(NSDictionary *)dict{
    if (self = [super init]) {
        self.icon = dict[@"icon"];
        self.name = dict[@"name"];
       
    }
    return self;
   
}

  

//plist文件使用的是一样的字典模型,因而此处可以使用kvc操作
- ( instancetype)initWithDict:(NSDictionary *)dict{
    if (self = [super init]) {
       
        [self setValuesForKeysWithDictionary:dict];
   }
    return self;
   
}
+ ( instancetype)appModelWithDict:(NSDictionary *)dict{
    //    AppModel *appModel = [[AppModel alloc]initWithDict:dict];
    return [[self alloc]initWithDict:dict];
   
}

@end

  

控制器中懒加载调用方法字典转模型:

 - (NSArray *)apps{
   
    if (_apps == nil) {
        //    1.获取全路径
        NSString *path =  [[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
        //     2.读取plist文件
       
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
        //     3.字典转模型
        NSMutableArray *tempArray = [NSMutableArray array];
        for (NSDictionary *dict in dictArray) {
        
            AppModel *appModel = [AppModel appModelWithDict:dict];
            [tempArray addObject:appModel];
           
           
        }
        _apps = tempArray;
       
    }
    return  _apps;
}

  

第三种,把整个字典转模型的过程全部封装在类中,定义类方法就行懒加载转模型。

AppModel.h文件中声明方法属性

#import <Foundation/Foundation.h>

@interface AppModel : NSObject

@property(nonatomic,copy)NSString *icon;
@property(nonatomic,copy)NSString *name;
//提供一个方法出来用来字典转化模型
- (instancetype)initWithDict:(NSDictionary *)dict;


+ (instancetype)appModelWithDict:(NSDictionary *)dict;
+ (NSArray *)apps;
@end

  

AppModel.m文件中实现方法,使用kvc

#import "AppModel.h"

@implementation AppModel
- (instancetype)initWithDict:(NSDictionary *)dict{
    if (self = [super init]) {
         [self setValuesForKeysWithDictionary:dict];
       
    }
    return self;
   
}
+ (instancetype)appModelWithDict:(NSDictionary *)dict{
    //    AppModel *appModel = [[AppModel alloc]initWithDict:dict];
    return [[self alloc]initWithDict:dict];
   
}
+ (NSArray *)apps{
   
    if (_apps == nil) {
        //    1.获取全路径
        NSString *path =  [[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
        //     2.读取plist文件
       
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
        //     3.字典转模型
        NSMutableArray *tempArray = [NSMutableArray array];
        for (NSDictionary *dict in dictArray) {
           
            AppModel *appModel = [AppModel appModelWithDict:dict];
            [tempArray addObject:appModel];
           
           
        }
        _apps = tempArray;
       
    }
    return  _apps;
}
@end

  

 控制器中进行调用字典转模型的过程:

- (NSArray *)apps
{
    if(_apps == nil)
    {
        _apps = [AppModel apps];
       
    }
    return _apps;
}

  

第四种,前面的三种字典转模型的方法仅仅是封装不同,这种方法是不构建对象方法,直接使用类方法。在类方法中创建模型对象,通过对对象的kvc操作提供字典转模型的方法。

AppMode.h文件中声明属性和类方法

#import <Foundation/Foundation.h>

@interface AppModel : NSObject

@property(nonatomic,copy)NSString *icon;
@property(nonatomic,copy)NSString *name;

+ (instancetype)appModelWithDict:(NSDictionary *)dict;
@end

  

AppModel.m文件中实现这个类方法的kvc操作

#import "AppModel.h"

@implementation AppModel

+ (instancetype)appModelWithDict:(NSDictionary *)dict{
    //    AppModel *appModel = [[AppModel alloc]initWithDict:dict];
    AppModel *app = [[AppModel alloc] init];
   
    [app setValuesForKeysWithDictionary:dict];
   
    return app;

  

在控制器中就行字典转模型,此处不适用forin,选择系统提供的 enumerateObjectsUsingBlock对字典进行遍历操作,效率更高

- (NSArray *)apps
{
    // 加载数据
    NSString *path = [[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil];
    // 得到字典数据
    NSArray *array = [NSArray arrayWithContentsOfFile:path];
   
    // 定义一个临时数组,保存数据模型
    NSMutableArray *arrayM = [NSMutableArray array];
   
    // 遍历数组,字典转模型
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        //
        NSDictionary *dict = obj;
       
        // 得到数据模型
        AppModel *app = [AppModel appModelWithDict:dict];
       
        [arrayM addObject:app];
    }];
   
    return arrayM;
}
}

  

转载于:https://www.cnblogs.com/gaizuojia/p/4652999.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值