iOS数据处理之字典转模型

当程序中有需要用到plist文件去存储一些东西的时候,我们在程序中也需要动态地去获取到plist文件中的内容并且使用它们。在MVC设计模式中,M指的是modal,代表着程序需要的数据,所以我们需要创建一个modal类然后处理plist文件中的数据或者是其他的来源,本文主要讲处理plist文件,而这个过程也就是本文要讨论的字典转模型

字典转模型可以说是有一个固定的模板,使用它很简单,但是我们应该从原理和思路上面去理解它,本文讲述的是处理中最基本的plist文件结构(还会有很多复杂的结构,不过都是建立在这个文件结构之上)首先是一个大的Array,接着Array中包含了很多的Dictionary,在Dictionary中包含了很多的NSString对象。同时,本文的项目是Single-View模板创建的。
首先先创建一个数据类(这里以不同的国家为例子),命名为Country
1、首先我们从Country.m去分析:
#import "Student.h"
@implementation Student
- (instancetype)initWithDic:(NSDictionary *)dic
{
    if (self = [super init]) {
        // 不适用KVC的情况
        self.name = dic[@"name"];
        self.age = dic[@"school"];
        // 使用KVC的情况
        [self setValue:dic[@"name"] forKey:self.name];
        [self setValue:dic[@"school"] forKey:self.school];
        // 使用KVC的封装好的字典操作方法
        [self setValuesForKeysWithDictionary:dic];
    }
    return self;
}
+ (instancetype)statusWithDic:(NSDictionary *)dic
{
    return [[self alloc]initWithDic:dic];
}
// 在数据类中封装好一个类方法,用于在其他类中(MVC中即为在Controller中)调用此方法来获得模型化的数据对象
+ (NSArray *)students
{
    NSMutableArray *mutableArray = [NSMutableArray array];
    // 从plist文件中拿到数据
    NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"statuses.plist" ofType:nil]];
    for (NSDictionary *dic in array) {
        // 取出的dic必须通过模型化再传入到mutableArray中
        [mutableArray addObject:[self statusWithDic:dic]];
    }
    return mutableArray;
}
@end
2、接着是通过看.h文件看看该怎么提供接口,使得其他类更为方便地操作数据类
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy, nonatomic) NSString *name;
@property (copy, nonatomic) NSString *school;

- (instancetype)initWithDic :(NSDictionary *)dic;
+ (instancetype)studentsWithDic :(NSDictionary *)dic;
+ (NSArray *)students;
@end
这里面暴露了三个方法,其中前两个方法都是关于初始化的方法,第三个方法是封装好的获得模型化的数据对象的方法接口
最后
3、最后我们看看怎么去使用这个具有模型化的数据类,本文就在viewController类中进行使用说明
#import "ViewController.h"
#import "Student.h"
@interface ViewController ()
@property (copy , nonatomic) NSArray *students;
@end
@implementation ViewController
// 模型对象的懒加载
- (NSArray *)students
{
    if (_students == nil) {
       // 在这里就调用了模型对象暴露出的接口,直接将模型化后的数据对象赋值给了属性
        _students = [Student students];
    }
    return _students;
}
4、以上操作做完了之后,我们就直接使用点语法,即为self.students来获得模型化后的数据对象,然后通过self.student.name和self.student.age来获得数据对象的属性值




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值