iOS开发之如何将字典转为模型
iOS开发之如何将字典转为模型
shenhuniurou 发表于2年前
iOS开发之如何将字典转为模型
  • 发表于 2年前
  • 阅读 17
  • 收藏 0
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

        刚刚学习了如何读取plist,将plist中的字典对象转成数组对象。字典和模型都可以存储数据,既然都可以存储对象,那么为什么要把plist中的字典转成模型呢?

        字典 :通过字符串类型的key来取值。(一般情况下,设置数据和取出数据都使用"字符串类型的key",编写这些key时,编译器不会有任何友善提示,需要手动敲写字符串key,key容易写错,而且如果写错,编译器不会有任何警告和报错,容易造成设错数据或者取错数据)

        模型 :用来存放数据的类, 继承自NSObject。(我感觉就像java中的javabean)所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示会更加专业。模型设置数据和取出数据都是通过它的属性,,属性名如果写错,编译器会马上报错,因此保证了数据的正确性。使用模型访问属性时, 编译器会提供一系列的提示,提高编码效率。


首先自定义一个模型类,属性和字典中的要对应

/** Shop.h */
#import <Foundation/Foundation.h>

@interface Shop : NSObject

/** 商品名称 */
@property(nonatomic, copy) NSString *name;

/** 商品图片 */
@property(nonatomic, copy) NSString *icon;

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

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

@end
/** Shop.m */
#import "Shop.h"

@implementation Shop
/** 用字典对象来初始化模型 */
-(id)initWithDict:(NSDictionary *)dict {
    
    if(self == [super init]) {
        self.name = dict[@"name"];
        self.icon = dict[@"icon"];
    }
    return self;
}

+(id)shopWithDict:(NSDictionary *)dict {
    return [[self alloc]initWithDict:dict];
}


@end

最后在ViewController中将字典转成模型

/** 所有商品数据 */
@property (strong, nonatomic)NSArray *shops;


//这个方法是重写的getter方法,懒加载方式
- (NSArray *)shops {
    
    if(_shops == nil) {
    
        //加载plist数据
        NSBundle *bundle = [NSBundle mainBundle];
        NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
        NSArray *dictArr = [NSArray arrayWithContentsOfFile:file];
        NSLog(@"%@", dictArr);
        
        //new一个可变数组存储模型对象
        NSMutableArray *shopArr = [NSMutableArray array];
        
        for (NSDictionary *dict in dictArr) {
            //调用Shop的类方法将字典转成模型
            Shop *shop = [Shop shopWithDict:dict];
            [shopArr addObject:shop];
        }
        
        //将模型数组赋值给_shops
        _shops = shopArr;
    }
    
    return _shops;
}


共有 人打赏支持
粉丝 20
博文 78
码字总数 63826
×
shenhuniurou
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: