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
上一篇下一篇

猜你喜欢

热点阅读