YYModel使用详解

根据需求、后台返回如下数据、需要解析为model类、方便操作数据。

 NSDictionary *returnDic = @{
                                @"birthPlace":@"宁夏固原市彭阳县草庙乡",
                                @"education":@"博士",
                                @"id":@"115",

                                //字典
                                @"personalMessage":@{
                                        @"marryAge":@"30",
                                        @"marryStatus":@"1",
                                        @"paddress":@"宁夏固原市",
                                        @"phone":@"158*****289",
                                        @"pname":@"sxk",
                                        },
                                @"babyFatherInfo" : @{
                                        @"bFatherAge" : @"38",
                                        @"bFatherUnit" : @"19957253180",
                                        @"bFatherPhone" : @"2222222",
                                        @"husbFamHistory" : @"3333333",
                                        @"bFatherPcId" : @"228384848484944",
                                        @"isHusbFamHistory" : @"1",
                                        @"bFatherJob" : @"01",
                                        @"bFatherHealth" : @"1",
                                        @"bFatherName" : @"sxk"
                                        },
                                
                                @"pregnancyHistorys" : @{
                                        @"pregnancyHistory" : @[
                                                @{
                                                    @"zycqk" : @"01",
                                                    @"historyId" : @"210585",
                                                    @"birthTime" : @"2019-04",
                                                    @"bearType" : @"01",
                                                    @"chhfqk" : @"01",
                                                    @"babyInfos" : @{
                                                            @"babyInfo" : @[
                                                                    @{
                                                                        @"babysex" : @"01",
                                                                        @"babyWeight" : @"3000",
                                                                        @"babyStatus" : @"01",
                                                                        @"ycrdn" : @"210585"
                                                                        },
                                                                    @{
                                                                        @"babysex" : @"01",
                                                                        @"babyWeight" : @"3000",
                                                                        @"babyStatus" : @"01",
                                                                        @"ycrdn" : @"210585"
                                                                        }
                                                                    ]
                                                            }
                                                    },
                                                @{
                                                    @"zycqk" : @"01",
                                                    @"historyId" : @"210586",
                                                    @"birthTime" : @"2019-04",
                                                    @"bearType" : @"01",
                                                    @"chhfqk" : @"01",
                                                    @"babyInfos" : @{
                                                            @"babyInfo" : @[
                                                                    @ {
                                                                        @"babysex" : @"01",
                                                                        @"babyWeight" : @"3000",
                                                                        @"babyStatus" : @"01",
                                                                        @"ycrdn" : @"210586"
                                                                    }
                                                                    ]
                                                            }
                                                    },
                                                ]
                                        },
                                };
复制代码

此数据包括四大模块:

1.基本信息-字符串

2.个人信息-personalMessage(字典)

3.小孩父亲资料-babyFatherInfo(字典)

4.历史怀孕详情-pregnancyHistorys(字典包含一个大的数组pregnancyHistory,数组包含n个字典,每个字典包含基本信息以及n个胎数)

接下来我们构建model类:

#import <Foundation/Foundation.h>
@class YYModel_PersonalModel,PersonalMessageModel,BabyFatherInfoModel,PregnancyHistorys,BabyInfos,BabyInfoModel;
NS_ASSUME_NONNULL_BEGIN

@interface YYModel_PersonalModel : NSObject

@property(nonatomic,copy) NSString *birthPlace;
@property(nonatomic,copy) NSString *education;
@property(nonatomic,copy) NSString *personId;
@property(nonatomic,strong) PersonalMessageModel *personalMessage;
@property(nonatomic,strong) BabyFatherInfoModel *babyFatherInfo;


@end

@interface PersonalMessageModel : NSObject

@property(nonatomic,copy) NSString *marryAge;
@property(nonatomic,copy) NSString *marryStatus;
@property(nonatomic,copy) NSString *paddress;
@property(nonatomic,copy) NSString *phone;
@property(nonatomic,copy) NSString *pname;

@end

@interface BabyFatherInfoModel : NSObject

@property(nonatomic,copy) NSString *bFatherAge;
@property(nonatomic,copy) NSString *bFatherUnit;
@property(nonatomic,copy) NSString *bFatherPhone;
@property(nonatomic,copy) NSString *bFatherJob;
@property(nonatomic,copy) NSString *bFatherName;

@end

@interface PregnancyHistorys : NSObject

@property(nonatomic,copy) NSString *zycqk;
@property(nonatomic,copy) NSString *birthTime;
@property(nonatomic,copy) NSString *historyId;
@property(nonatomic,copy) NSString *bearType;
@property(nonatomic,strong) BabyInfos *babyInfos;

@end

@interface BabyInfos : NSObject

@property(nonatomic,strong)NSArray *babyInfo;


@end

@interface BabyInfoModel : NSObject

@property(nonatomic,copy) NSString *babyWeight;
@property(nonatomic,copy) NSString *babyStatus;
@property(nonatomic,copy) NSString *babysex;
@property(nonatomic,copy) NSString *ycrdn;


@end
NS_ASSUME_NONNULL_END
复制代码

使用YYModel解析如下

首先我们解析除pregnancyHistorys意外所有数据

在model .m文件使用如下方法

// 如果实现了该方法,则处理过程中会忽略该列表内的所有属性-黑名单
+ (NSArray *)modelPropertyBlacklist {
    return @[@"pregnancyHistorys"];
}
复制代码

由于基本信息出现了id关键字、model .m文件中特作如下处理:

// 当后台返回系统关键字时、属性数据映射,用来定义多样化数据时转换声明
+ (NSDictionary *)modelCustomPropertyMapper {
    return @{
             @"personId":@"id",
             };
}
复制代码

执行了此方法,就可以将id转变为personID。

解析过程如下:(注明了YYModel常用的方法、这里不一一解释)

NSDictionary *dictionary = [[YYModelJsonData shareInstance]dataDictionary];
//字典转模型 + (nullable instancetype)yy_modelWithDictionary:(NSDictionary *)dictionary
YYModel_PersonalModel *model = [YYModel_PersonalModel yy_modelWithDictionary:dictionary];
NSLog(@"出生地:%@、教育水平:%@、personID:%@、个人信息-结婚年龄:%@、小孩父亲:%@",model.birthPlace,model.education,model.personId,model.personalMessage.marryAge,model.babyFatherInfo.bFatherName);
    
//模型转json字符串 yy_modelToJSONString
NSString *json = [model yy_modelToJSONString];
NSLog(@"json:%@",json);
    
// 模型转NSObject yy_modelToJSONObject
NSDictionary *returnDic = [model yy_modelToJSONObject];
NSLog(@"returnValue:%@",returnDic);
    
// 模型转NSData yy_modelToJSONData
NSData *dataJson = [model yy_modelToJSONData];
NSLog(@"dataJson:%@",dataJson);
复制代码

打印结果如下(只打印个别字段):

2019-04-24 10:53:40.561403+0800 RepeatUnit_iOS[2353:78795] 出生地:宁夏固原市彭阳县草庙乡、教育水平:博士、personID:115、个人信息-结婚年龄:30、小孩父亲:sxk
2019-04-24 10:53:40.562234+0800 RepeatUnit_iOS[2353:78795] json:{"id":"115","personalMessage":{"phone":"158*****289","marryStatus":"1","marryAge":"30","paddress":"宁夏固原市","pname":"sxk"},"babyFatherInfo":{"bFatherJob":"01","bFatherAge":"38","bFatherPhone":"2222222","bFatherUnit":"19957253180","bFatherName":"sxk"},"birthPlace":"宁夏固原市彭阳县草庙乡","education":"博士"}
2019-04-24 10:53:40.562575+0800 RepeatUnit_iOS[2353:78795] returnValue:{
    babyFatherInfo =     {
        bFatherAge = 38;
        bFatherJob = 01;
        bFatherName = sxk;
        bFatherPhone = 2222222;
        bFatherUnit = 19957253180;
    };
    birthPlace = "\U5b81\U590f\U56fa\U539f\U5e02\U5f6d\U9633\U53bf\U8349\U5e99\U4e61";
    education = "\U535a\U58eb";
    id = 115;
    personalMessage =     {
        marryAge = 30;
        marryStatus = 1;
        paddress = "\U5b81\U590f\U56fa\U539f\U5e02";
        phone = "158*****289";
        pname = sxk;
    };
}
2019-04-24 10:53:40.562824+0800 RepeatUnit_iOS[2353:78795] dataJson:<7b226964 223a2231 3135222c 22706572 736f6e61 6c4d6573 73616765 223a7b22 70686f6e 65223a22 3135382a 2a2a2a2a 32383922 2c226d61 72727953 74617475 73223a22 31222c22 6d617272 79416765 223a2233 30222c22 70616464 72657373 223a22e5 ae81e5a4 8fe59bba e58e9fe5 b882222c 22706e61 6d65223a 2273786b 227d2c22 62616279 46617468 6572496e 666f223a 7b226246 61746865 724a6f62 223a2230 31222c22 62466174 68657241 6765223a 22333822 2c226246 61746865 7250686f 6e65223a 22323232 32323232 222c2262 46617468 6572556e 6974223a 22313939 35373235 33313830 222c2262 46617468 65724e61 6d65223a 2273786b 227d2c22 62697274 68506c61 6365223a 22e5ae81 e5a48fe5 9bbae58e 9fe5b882 e5bdade9 98b3e58e bfe88d89 e5ba99e4 b9a1222c 22656475 63617469 6f6e223a 22e58d9a e5a3ab22 7d>
复制代码

现在我们继续解析历史孕次(pregnancyHistorys),跟上面解析过程如出一辙:

NSArray *history = [[dictionary objectForKey:@"pregnancyHistorys"]objectForKey:@"pregnancyHistory"];
//model数组集合 传入model类以及json数据
NSArray *historyModelArray = [NSArray yy_modelArrayWithClass:[PregnancyHistorys class] json:history];
NSLog(@"-%@",historyModelArray);
    
//第一个数据为例、实际应用中会根据indexPath等参数对应
PregnancyHistorys *historyModel = historyModelArray[0];
NSLog(@"小孩编号:%@---小孩infos:%@",historyModel.zycqk,historyModel.babyInfos.babyInfo);
   
//第一个数据为例、实际应用中会根据indexPath等参数对应
BabyInfoModel *babyInfoModel = [BabyInfoModel yy_modelWithDictionary:historyModel.babyInfos.babyInfo[0]];
NSLog(@"小孩体重:%@",babyInfoModel.babyWeight);
复制代码

打印结果如下(只打印个别字段):

2019-04-24 10:53:40.573012+0800 RepeatUnit_iOS[2353:78795] -(
    "<PregnancyHistorys: 0x600001209d40>",
    "<PregnancyHistorys: 0x600001209ec0>"
)
2019-04-24 10:53:40.573215+0800 RepeatUnit_iOS[2353:78795] 小孩编号:01---小孩infos:(
        {
        babyStatus = 01;
        babyWeight = 3000;
        babysex = 01;
        ycrdn = 210585;
    },
        {
        babyStatus = 01;
        babyWeight = 3000;
        babysex = 01;
        ycrdn = 210585;
    }
)
2019-04-24 10:53:40.573562+0800 RepeatUnit_iOS[2353:78795] 小孩体重:3000
复制代码

另外,YYModel还提供了白名单:

如果实现了该方法,则处理过程中不会处理该列表外的属性-白名单
假如只需要解析个人信息时,返回personalMessage即可
+ (NSArray *)modelPropertyWhitelist {
    return @[@"personalMessage"];
}
复制代码

通过以上解析过程、我们基本掌握了YYModel常见的方法,解析以后,也能拿到自己想要的数据。具体处理过程还需要结合UI需求。

转载于:https://juejin.im/post/5cbfb98df265da03b57b59fb

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值