用模型取代字典数组的好处
- 使用字典的弊端
- 一般情况下设置字典数据和取出字典数据都得使用字符串类型的"key",编写这些"key"时,Xcode没有智能的提示,只能手动的去敲那些字符串
比如
```objc
NSString *name = dict[@"name"];
dict[@"name"] = @"jordan";
```
-
如果手敲字符串key,key就很容易写错,此时编译器是不会有任何的警告和报错,则会造成数据存取和读取出错
-
模型的优点
- IOS中的模型,其实就是数据模型,专门用于存放数据的对象
- 模型设置数据和读取都是通过其属性,属性名称如果写错,编译器会做出警告或者报错,提示修复数据的正确性
- 同样,使用模型访问属性时,Xcode会有数据提示,可以提高编写代码的效率
NSString *name = dict.name; dict.name = @"jordan";
字典转模型过程
- 字典转模型的过程最好将其封装在模型内部
- 在@interface中连线数组
@interface property (strong, nanotomic) NSArray * shop;
- 模型应该提供一个可以传入的字典参数的构造方法
- 新建cocoa touch class 继承于NSObject,设置商品的名称和图片属性
- .h中传入两个构造方法
import <Foundation/Foundation.h>
@interface shop : NSObject
@interface property (strong, nanotomic) NSString * name;
@interface property (strong, nanotomic) NSString * icon;
-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)initWithDict:(NSDictionary *)dict;
@end
```
-
.m中实现构造方法
#import "shop.h" @ implementation shop -(instancetype)initWithDict:(NSDictionary *) dict { if (self = [super init]) { self.name = dict@"name"; self.icon = dict@"icon"; } return self; } +(intancetype)shopWithDict:(NSDictionary *)dict { return [[self alloc] initWithDict:dict]; } @end
-
控制器中加载字典模型
-
使用懒加载字典模型
pragma mark - 加载字典数组
- (NSArray *) shops{
if (_shop == nil){
//1、加载一个字典数组
NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"]];
//2、将字典数组转换为字典模型
NSMutableArray *shopArray = [NSMutableArray array];
for (NSDictionary *dict in dictArray){
shop *s = [shop shopWithDict:dict];
[shopArray addObject:shop];
}
//3、赋值
_shop = shopArray;
}
return _shops;
}
```
网友评论