YYModel的使用

YYModel笔记

yymodel用于模型的序列化与反序列化

1、简单的model与json(字典类型)的转换

// JSON:
{"uid":123456,"name":"Harry","created":"1965-07-31T00:00:00+0000"
}// Model:
@interface User : NSObject
@property UInt64 uid;
@property NSString *name;
@property NSDate *created;
@end@implementation User@end

转换代码

// 将 JSON (NSData,NSString,NSDictionary) 转换为 Model:
User *user = [User yy_modelWithJSON:json];// 将 Model 转换为 JSON 对象:
NSDictionary *json = [user yy_modelToJSONObject];

⚠️注意:1、当json中的对象类型与Model的属性不一致的时候,YYModel会自动转换,转换表如下

在表之外的值会被忽略!

​ 2、比较扯不写了,反序列化的时候,json中有多个相同的key值与model某个属性对应,则按顺序取第一个不为0的来赋值

​ 3、如果将model的get方法重写,在model to json时, 是拿到get方法的值,因此可以给model通过重写get方法设置默认值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I3iyn30e-1627295088405)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210726161703148.png)]

2、model包含了其他model

跟1一样

3、属性为容器类的model

我感觉跟1一样啊,不需要其他的调用方法呀

4、黑名单与白名单

注意是➕方法

加入黑名单:

实现一下方法:

+ (NSArray *)modelPropertyBlacklist {return @[@"uid"];
}

⚠️注意:遇到一个坑,当对model重写属性的get方法的时候,json转model,黑名单失效

加入白名单:

+ (NSArray *)modelPropertyWhitelist {return @[@"name"];
}

5、进行数据校验忽略

注意是➖方法

反序列化

以下函数是在反序列化之后调用的。

实现:(BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic,如果不符合校验标准,该model就会被忽略为空!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TH9pKzFN-1627295088413)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210726180543611.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GsvnVDP3-1627295088423)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210726180641235.png)]

序列化

以下函数是在序列化之后调用的,如果以下函数的return yes条件的dict不为空,则重新序列化一次

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9rdwH6uG-1627295088426)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210726182053272.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-74YQTqn9-1627295088427)(/Users/inke213303m/Library/Application Support/typora-user-images/image-20210726182256086.png)]