2.1 JSONModel实例化对象
2019-04-18 本文已影响0人
草根小强
JSONModel实例化对象
#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//JSONModel 是一个第三方库,可以帮我们快速实例化对象,并赋值
//如果用JSONModel ,通过一个字典,来实例化一个对象,那么这个字典可以包含多余的,在模型里面没有声明的key
//用JSONModel 需要保证,属性里面声明的key,在字典里面必须都有包含,除非》》这个key是Optional的
//Optional 只能修饰OC对象,不能修饰基本数据类型
//JSONModel 会同时对里面的子模型进行实例化
NSDictionary *dict = @{
@"name":@"小强",
@"age":@20,
@"sex":@1,
@"id":@12345,
@"dog":@{
@"name":@"小强",@"kind":@"单身狗",@"age":@1
},
@"dogs":@[
@{
@"name":@"李四",@"kind":@"单身狗"
},
@{
@"name":@"王五",@"kind":@"单身狗"
},
@{
@"name":@"赵四",@"kind":@"单身狗"
},
@{
@"name":@"张三",@"kind":@"单身狗"
},
]
};
//通过一个字典,去实例化一个模型
Person *p = [[Person alloc] initWithDictionary:dict error:nil];
NSLog(@"%@",p);
}
@end
#import "JSONModel.h"
@class Dog;
//在这里,声明一个空协议
//要求:协议的名字必须是Dog
@protocol Dog
@end
@interface Person : JSONModel
@property (nonatomic,copy)NSString<Optional>*name;
// 用Optional来修饰
@property (nonatomic,assign)NSNumber<Optional> *age;//NSNumber是数字对象
@property (nonatomic,copy)NSString* ID;//id
////需求1: 一个人样了一条狗
@property (nonatomic,strong)Dog*dog;
//需求2:一个人,养了数条狗
// 我们需要告诉JSONMOdel 这个数组中每个元素的是什么类型的
//1. 申明一个空的协议,协议的名字需要是数组中元素类型的类名
//2.
#warning //1. 申明一个空的协议,协议的名字需要是数组中元素类型的类名 //2.我们需要告诉JSONMOdel 这个数组中每个元素的是什么类型的
@property (nonatomic,strong)NSArray<Dog>*dogs;
@end
#warning 一个文件里面可以声明很多类,但是声明了类之后,必须要写实现
@interface Dog : JSONModel
//
@property (nonatomic,copy)NSString*name;
@property (nonatomic,copy)NSString*kind;
@end
#import "Person.h"
@implementation Person
// 键映射
+(JSONKeyMapper *)keyMapper{
//就是属性里面的属性名字和字典里面的键不一样 所以我们就要用键映射
// 格式 键是字典的键 值是属性名称
return [[JSONKeyMapper alloc] initWithDictionary:@{
@"id":@"ID"
}];
}
@end
//对应Dog的实现
@implementation Dog
//
//
//
@end
JSONModel实例化对象.png