首页 > 代码库 > OC:字典转模型

OC:字典转模型

 1 新建一个NSObject的类作为模型类:

#import <Foundation/Foundation.h>

@interface VSQuestion : NSObject

@property (nonatomic,copy)NSString *answer;

@property (nonatomic,copy)NSString *icon;

@property (nonatomic,copy)NSString *title;

@property (nonatomic,strong)NSArray *options;

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

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

@end

 

#import "VSQuestion.h"

@implementation VSQuestion

//在模型中写一个初始化方法,让ViewController调用这个方法,把字典作为参数传进来;初始化方法里会把传进来的字典里的内容一个个传给模型里的各个属性。

- (instancetype)initWithDict:(NSDictionary*)dict

{

    if (self = [super init]) {

        self.answer = dict[@"aswer"];

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

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

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

    }

    return self;

}

 

//最好顺便提供一个工厂方法,方便别人调用。

+ (instancetype)questionWithDict:(NSDictionary*)dict

{

    return [[self alloc]initWithDict:dict];

}

@end

 

 

 

2 在控制器里定义一个数组,然后重写get方法,让这个数组转为模型:

@interface ViewController ()

@property (nonatomic,strong)NSArray *questions;

@end

 

@implementation ViewController

- (NSArray*)questions

{

    //首先判断一下是否为空,如果不为空则说明get方法已经调用过,所以直接返回。如果为空则实现以下方法。

    if (_questions == nil) {

        //创建数组:用mainBundle查找plist文件的路径,然后通过这路径把plist里的Array传出来。

        NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"questions.plist" ofType:nil]];

        

        //创建可变数组:因为可变数组可以用for循环,把对象一个个添加进去。

        NSMutableArray *que = [[NSMutableArray array]init];

        

        //创建for in循环,每一次循环都会把右边数组里的对象赋值给左边的对象,循环次数就是右边数组里的count值。

        for (NSDictionary *dict in dictArray) {

            

            //调用模型的初始化方法来创建模型:把对象传给模型的初始化方法,得到一个个模型对象。

            VSQuestion *question = [[VSQuestion alloc]initWithDict:dict];

            

            //把一个个模型对象添加到可变数组que里面。

            [que addObject:question];

        }

        

        //把完整的模型传给控制器的数组。

        _questions = que;

    }

    //返回一个模型

    return _questions;

}

 

OC:字典转模型