IOS中字典数组的模型封装

用模型取代字典数组的好处

  • 使用字典的弊端
  • 一般情况下设置字典数据和取出字典数据都得使用字符串类型的"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;
  }

  ```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容