iOS 开发-字典转模型

iOS 开发中,网络请求得到json数据并转化为字典,然后字典转化成模型,或者读取本地的plist,文件时将里面的字典转换成模型,这是很普遍要做的事。
就拿plist文件来举例:(假如现在有一个关于电影的plist文件,即一个电影的数组,数组里面存放的是字典,
字典里面有电影名,,电影图片,电影上映年份和标题等属性,现在我要把他们依次显示在事先定义好的tableView上)
如果没用到模型,我们就要在显示文件的控制器类里面依次通过字典里面的key值取得属性,这样有一个弊端:
就是key值容易写错,而且编译器还不会报错且不利于以后的代码维护
现在用模型来实现这个效果:<pre name="code" class="objc">//————————————————————————————————————这是自定义的模型类FilmModal的.h文件—————————————————————————————————
   #import <Foundation/Foundation.h>

   @interface FilmModel : NSObject


/**定义plist文件中的四个属性 */
   @property(nonatomic,weak) NSString *title;
   @property(nonatomic,weak) NSString *image;
   @property(nonatomic,weak) NSString *year;
   @property(nonatomic,weak) NSString *rating;

   @end

 
</pre><pre name="code" class="objc">//—————————————————————————————————————这是控制器的.M文件—————————————————————————————————————————
 /** 从数组中获取字典 */
    NSDictionary *dic = _dataArray[indexPath.row];

/** 引入模型类,将字典转换为模型 */
    FilmModel *film = [[FilmModel alloc] init];
    film.title = dic[@"title"];
    film.image = dic[@"image"];
    film.year = dic[@"year"];
    film.rating = dic[@"rating"];

    
    /**
      1) 设置相应的内容(第一种方法)
      imageView.image = [UIImage imageNamed:dic[@"image"]];
      titleLabel.text = dic[@"title"];
      ratingLabel.text = dic[@"rating"];
      yearLabel.text = dic[@"year"];
*/
    
      2) 设置相应的内容(第二种方法)
      imageView.image = [UIImage imageNamed:film.image];
      titleLabel.text = film.title;
      ratingLabel.text = film.rating;
      yearLabel.text = film.year;
</pre><pre name="code" class="objc">很显然,当设置内容的时候,第二种方法准确度更高,因为xcode的点语法会自动提示,还可以更进一步,将字典转换为模


型的部分全部放入模型类分装起来,这样一来只要有控制器想加载这些数据,就可以调用这个模型类,即把FilmModal类


变为共有的类提供给所有的控制器使用,而控制器又不需要知道模型类里的实现方法,以后数据多的话维护起来更加方便




/** ——————————————————下面是最终封装好的模型代码—————————————————— */
<pre name="code" class="objc">/**  ——————————————————模型类的.h文件 —————————————————— */

#import "FilmModel.h"

@implementation FilmModel

- (id) initWithDic:(NSDictionary *)dic {
    
    if (self == [super init]) {
        self.image =  dic[@"image"];
        self.title = dic[@"title"];
        self.year = dic[@"year"];
        self.rating = dic[@"rating"];
    }
    return self;
}


+ (id) filmWithDic: (NSDictionary *) dic
{
    return [[self alloc] initWithDic:dic];
}

@end


/**  ——————————————————模型类的.m文件 —————————————————— */

#import "FilmModel.h"

@implementation FilmModel

- (id) initWithDic:(NSDictionary *)dic {
    
    if (self == [super init]) {
        self.image =  dic[@"image"];
        self.title = dic[@"title"];
        self.year = dic[@"year"];
        self.rating = dic[@"rating"];
    }
    return self;
}


+ (id) filmWithDic: (NSDictionary *) dic
{
 
    return [[self alloc] initWithDic:dic];
}


/**  ——————————————————控制器实现代码————————————————— */

 //4) 从数组中获取字典
    NSDictionary *dic = _dataArray[indexPath.row];

    FilmModel *film = [FilmModel filmWithDic:dic];//通过这一行代码可以看到,当创建对象时初始化方法习惯性的以类名开头,(比如:NSArray

 *array = [NSArray arrayWithArray:<#(nonnull NSArray *)#>])

这就使得控制器里的实现文件相当简洁了;
 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值