• 字典转模型


    用模型取代字典的好处

        • 使用字典的坏处
        • 一般情况下,设置数据和取出数据都使用“字符串类型的key,编写这些key时,编译器不会有任何友善提示,需要手敲dict[@"name"] = @"Jack";NSString *name = dict[@"name"];
        • 手敲字符串keykey容易写错
        • Key如果写错了,编译器不会有任何警告和报错,造成设错数据或者取错数据
        • 使用模型的好处
        • 所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业
        • 模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性
        • 使用模型访问属性时,编译器会提供一系列的提示,提高编码效率app.name = @"Jack”;NSString *name = app.name;

    字典转模型

        • 字典转模型的过程最好封装在模型内部
        • 模型应该提供一个可以传入字典参数的构造方法
        • - (instancetype)initWithDict:(NSDictionary *)dict;
        • + (instancetype)xxxWithDict:(NSDictionary *)dict;
        • Instancetype
        • instancetype在类型表示上,跟id一样,可以表示任何对象类型
        • instancetype只能用在返回值类型上,不能像id一样用在参数类型上
        • instancetypeid多一个好处:编译器会检测instancetype的真实类型

    /**

     *  名称

     */

    @property (nonatomic, copy) NSString *name;

    /**

     *  图标

     */

    @property (nonatomic, copy) NSString *icon;

    /**

     *  通过字典来初始化模型对象

     *

     *  @param dict 字典对象

     *

     *  @return 已经初始化完毕的模型对象

     */

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

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

    - (instancetype)initWithDict:(NSDictionary *)dict

    {

        if (self = [super init]) {

            self.name = dict[@"name"];

            self.icon = dict[@"icon"];

        }

        return self;

    }

    + (instancetype)appWithDict:(NSDictionary *)dict

    {

        return [[self alloc] initWithDict:dict];

    }

    - (NSArray *)apps

    {

        if (_apps == nil) {

            // 初始化

            

            // 1.获得plist的全路径

            NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];

            

            // 2.加载数组

            NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];

            

            // 3.将dictArray里面的所有字典转成模型对象,放到新的数组中

            NSMutableArray *appArray = [NSMutableArray array];

            for (NSDictionary *dict in dictArray) {

                // 3.1.创建模型对象

          LDApp *app = [[LDApp alloc] initWithDict:dict];

                LDApp *app = [LDApp appWithDict:dict];

                

                // 3.2.添加模型对象到数组中

                [appArray addObject:app];

            }

            

            // 4.赋值

            _apps = appArray;

        }

        return _apps;

    }

  • 相关阅读:
    MYSQL主从同步故障一例及解决过程
    mysql主从复制
    I want a mysqldump –ignore-database option
    MYSQL使用mysqldump导出某个表的部分数据
    Linux MySQL主从复制(Replication)配置
    mysql mysqldump只导出表结构或只导出数据的实现方法
    Mysql导出表结构及表数据 mysqldump用法
    MVC 数据验证
    JS中call、apply的用法说明
    js 与或运算符 || && 妙用
  • 原文地址:https://www.cnblogs.com/LDSmallCat/p/4987118.html
Copyright © 2020-2023  润新知