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)]
发布评论