2019独角兽企业重金招聘Python工程师标准>>>
刚刚学习了如何读取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;
}