@yy13508252401

0条评论12张
1条评论13张
0条评论5张
0条评论15张
2条评论15张
1条评论5张
0条评论14张
1条评论14张
4条评论5张
0条评论22张
9条评论17张YYKit系列之——YYModel使用 - CSDN博客
YYKit系列之——YYModel使用
JSON转字符串普通字典转模型模型属性有自定义的模型YYUSer属性有数组(数组里自定义模型),还有字典和集合字典里的key与模型里的属性名不一致
常用的几个方法:
# json转模型
+ (instancetype)yy_modelWithJSON:(id)
# 模型转字符串
- (NSString *)yy_modelToJSONString
# 字典转模型
+ (instancetype)yy_modelWithDictionary:(NSDictionary *)
# 声明数组、字典或者集合里的元素类型时要重写
+ (nullable NSDictionary&NSString *, id& *)modelContainerPropertyGenericClass;
# 字典里的key值与模型的属性值不一致要重复
+ (nullable NSDictionary&NSString *, id& *)modelCustomPropertyM
# 下面两者是属性值在两个dic与模型之间的转化方法(自己看代码吧~
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic ;
- (BOOL)modelCustomTransformToDictionary:(NSMutableDictionary *)dic;代码演示和转模型注释:一、JSON转字符串执行代码:// JSON -&模型 (内部实现:json -& 字典 -& 模型)
YYBook *book = [YYBook yy_modelWithJSON:@&
\&name\&: \&Harry Potter\&,
\&pages\&: 512,
\&publishDate\&: \&\&
//模型 -& 字符串
NSString *bookJSON = [book yy_modelToJSONString];
NSLog(@&Book: 二、普通字典转模型模型代码:@property (nonatomic, copy) NSString *
@property (nonatomic, assign) uint64_
@property (nonatomic, strong) NSDate *publishD执行代码: NSDictionary *dic = @{
@&name&: @&Harry Potter&,
@&pages&: @(512),
@&publishDate&: @&&
YYBook *book1 = [YYBook yy_modelWithDictionary:dic];
NSString *bookJSON1 = [book1 yy_modelToJSONString];
NSLog(@&bookJSON: %@&,bookJSON1);三、模型属性有自定义的模型YYUSer模型代码:@property (nonatomic, assign) uint64_
@property (nonatomic, copy) NSString *
@property (nonatomic, strong) NSDate *createT
@property (nonatomic, strong) YYUser *
#自定义模型执行代码:NSDictionary *dic = @{
@&rid&: @(),
@&name&: @&YYKit&,
@&createTime& : @&T06:24:26Z&,
@&owner&: @{
@&uid& : @(989898),
@&name& : @&mawenxing&
YYRepo *repo1 = [YYRepo yy_modelWithDictionary:dic];
NSLog(@&Repo1: %@\nowner.name=%@&, repo1.name,repo1.owner.name);四、属性有数组属性里有数组(数组里自定义模型),还多字典和集合模型代码:# YYAlbum.h
@property (nonatomic, copy) NSString *
@property (nonatomic, strong) NSArray * # Array&YYPhoto&
@property (nonatomic, strong) NSDictionary *likedU # Key:name(NSString) Value:user(YYUser)
@property (nonatomic, strong) NSSet *likedUserI # Set&NSNumber&
# YYPhoto.h
@property (nonatomic, copy) NSString *
@property (nonatomic, copy) NSString *
# YYAlbum.m
#把数组里面带有对象的类型专门按照这个方法,这个格式写出来
-(nullable NSDictionary&NSString *, id& *)modelContainerPropertyGenericClass{
: YYPhoto.class,
@&likedUsers&
: YYUser.class,
@&likedUserIds& : NSNumber.class
}执行代码:///源代码这里有些成字典的,大家如果看不懂这个JSON可以看字典
YYAlbum *album = [YYAlbum yy_modelWithJSON:@&
\&name\& : \&Happy Birthday\&,
\&photos\& : [
\&url\&:\&/1.png\&,
\&desc\&:\&Happy~\&
\&url\&:\&/2.png\&,
\&desc\&:\&Yeah!\&
\&likedUsers\& : {
\&Jony\& : {\&uid\&:10001,\&name\&:\&Jony\&},
\&Anna\& : {\&uid\&:10002,\&name\&:\&Anna\&}
\&likedUserIds\& : []
NSString *albumJSON = [album yy_modelToJSONString];
NSLog(@&Album: 五、字典里的属性名与模型里的属性名不一致模型代码:# YYMessage.h
@property (nonatomic, assign) uint64_t messageId;
@property (nonatomic, strong) NSString *
@property (nonatomic, strong) NSDate *
# YYMessage.m
+ (nullable NSDictionary&NSString *, id& *)modelCustomPropertyMapper{
return @{@&messageId&:@&i&,
@&content&:@&c&,
@&time&:@&t&};
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic {
self.time = (NSDate *)[NSDate dateWithTimeIntervalSince1970:[dic[@&t&] doubleValue]/1000];
return YES;
- (BOOL)modelCustomTransformToDictionary:(NSMutableDictionary *)dic {
dic[@&t&] = @([self.time timeIntervalSince1970] * 1000).description;
return YES;
}执行代码:
NSDictionary *dic = @{@&i&:@,
@&c&:@&Hello&,
YYMessage *message = [YYMessage yy_modelWithDictionary:dic];
NSString *messageJSON = [message yy_modelToJSONString];
NSLog(@&messageJSON: %@&, messageJSON);
YYMessage *message = [YYMessage yy_modelWithJSON:@&{\&i\&:\&\&,\&c\&:\&Hello\&,\&t\&:\&0\&}&];
NSString *messageJSON = [message yy_modelToJSONString];
NSLog(@&messageJSON: %@&, messageJSON);演示源码:开篇说明:&虽然网上有很多讲解YYModel使用方法的文章,包括YYModel作者也在github上对其做了使用说明。&但在我实际使用过程中,依然发现文档的不完善,比如对于复杂的模型(如多层嵌套)讲解的仍不透彻,同时本文也会介绍一神器配合YYModel使用,让你感受分分钟搞定模型创建的酸爽。&当然为了减少读者的学习成本,本会对YYModel作者的文档进行丰富和扩展。可在github上下载,以便更直观了解各种使用场景详细代码。&文章只要包含:详解YYModel的多种使用场景拓展插件,让你一分钟搞定所有的模型的创建和调用。一、YYModel的使用场景1.简单的 Model 与 JSON 相互转换&code class=&hljs objectivec has-numbering& style=&display: padding: 0 color: box-sizing: border- font-family: &Source Code Pro&,font-size: white-space: border-radius: 0 word-wrap: background:&&&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// JSON:&/span&
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&uid&&/span&:&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&123456&/span&,
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&name&&/span&:&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&Harry&&/span&,
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&created&&/span&:&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&T00:00:00+0000&&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// Model:&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@interface&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&User&/span& : &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&NSObject&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& UInt64
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDate&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@implementation&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&User&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right: 1px solid rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&/ul&-&code class=&hljs objectivec has-numbering& style=&display: padding: 0 color: box-sizing: border- font-family: &Source Code Pro&,font-size: white-space: border-radius: 0 word-wrap: background:&&&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 将 JSON (NSData,NSString,NSDictionary) 转换为 Model:&/span&
User *user = [User yy_modelWithJSON:json];
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 将 Model 转换为 JSON 对象:&/span&
&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDictionary&/span& *json = [user yy_modelToJSONObject];&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right: 1px solid rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&/ul&当 JSON/Dictionary 中的对象类型与 Model 属性不一致时,YYModel 将会进行如下自动转换。自动转换不支持的值将会被忽略,以避免各种潜在的崩溃问题。JSON/DictionaryModelNSStringNSNumber,NSURL,SEL,ClassNSNumberNSStringNSString/NSNumberC
number (BOOL,int,float,NSUInteger,UInt64,…)NaN and Inf will be ignoredNSStringNSDate
parsed with these formats:yyyy-MM-ddyyyy-MM-dd HH:mm:ssyyyy-MM-dd’T’HH:mm:ssyyyy-MM-dd’T’HH:mm:ssZEEE MMM dd HH:mm:ss Z yyyyNSDateNSString
formatted with ISO8601:“YYYY-MM-dd’T’HH:mm:ssZ”NSValuestruct
(CGRect,CGSize,…)NSNullnil,0“no”,”false”,…@(NO),0“yes”,”true”,…@(YES),12.Model 属性名和 JSON 中的 Key 不相同&code class=&hljs objectivec has-numbering& style=&display: padding: 0 color: box-sizing: border- font-family: &Source Code Pro&,font-size: white-space: border-radius: 0 word-wrap: background:&&&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// JSON:&/span&
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&n&&/span&:&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&Harry Pottery&&/span&,
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&p&&/span&: &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&256&/span&,
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&ext&&/span& : {
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&desc&&/span& : &span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&A book written by J.K.Rowing.&&/span&
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&ID&&/span& : &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&100010&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// Model:&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@interface&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Book&/span& : &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&NSObject&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSInteger&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *bookID;
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@implementation&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Book&/span&&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//返回一个 Dict,将 Model 属性名对映射到 JSON 的 Key。&/span&
+ (&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDictionary&/span& *)modelCustomPropertyMapper {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& @{@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&name&&/span& : @&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&n&&/span&,
@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&page&&/span& : @&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&p&&/span&,
@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&desc&&/span& : @&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&ext.desc&&/span&,
@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&bookID&&/span& : @[@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&id&&/span&,@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&ID&&/span&,@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&book_id&&/span&]};
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right: 1px solid rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&li style=&box-sizing: border- padding: 0px 5&&26&/li&&/ul&你可以把一个或一组 json key (key path) 映射到一个或多个属性。如果一个属性没有映射关系,那默认会使用相同属性名作为映射。&在 json-&model 的过程中:如果一个属性对应了多个 json key,那么转换过程会按顺序查找,并使用第一个不为空的值。&在 model-&json 的过程中:如果一个属性对应了多个 json key (key path),那么转换过程仅会处理第一个 json key (key path);如果多个属性对应了同一个 json key,则转换过过程会使用其中任意一个不为空的值。3.Model 包含其他 Model&code class=&hljs objectivec has-numbering& style=&display: padding: 0 color: box-sizing: border- font-family: &Source Code Pro&,font-size: white-space: border-radius: 0 word-wrap: background:&&&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// JSON&/span&
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&author&&/span&:{
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&name&&/span&:&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&J.K.Rowling&&/span&,
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&birthday&&/span&:&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&T00:00:00+0000&&/span&
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&name&&/span&:&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&Harry Potter&&/span&,
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&pages&&/span&:&span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&256&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// Model: 什么都不用做,转换会自动完成&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@interface&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Author&/span& : &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&NSObject&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDate&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@implementation&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Author&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@interface&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Book&/span& : &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&NSObject&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& NSUI
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& Author * &span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//Book 包含 Author 属性&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@implementation&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Book&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right: 1px solid rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&/ul&-4.容器类属性&code class=&hljs objectivec has-numbering& style=&display: padding: 0 color: box-sizing: border- font-family: &Source Code Pro&,font-size: white-space: border-radius: 0 word-wrap: background:&&&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@class&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Shadow&/span&, &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Border&/span&, &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Attachment&/span&;&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@interface&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Attributes&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSArray&/span& * &span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//Array&Shadow&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& NSSet * &span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//Set&Border&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSMutableDictionary&/span& * &span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//Dict&NSString,Attachment&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@implementation&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Attributes&/span&&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 返回容器类中的所需要存放的数据类型 (以 Class 或 Class Name 的形式)。&/span&
+ (&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDictionary&/span& *)modelContainerPropertyGenericClass {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& @{@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&shadows&&/span& : [Shadow class],
@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&borders&&/span& : Border&span class=&hljs-variable& style=&color: rgb(102, 0, 102); box-sizing: border-&&.class&/span&,
@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&attachments&&/span& : @&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&Attachment&&/span& };
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right: 1px solid rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&/ul&在实际使用过过程中,[Shadow class],Border.class,@&Attachment&没有明显的区别。&这里仅仅是创建作者有说明,实际使用时,需要对其遍历,取出容器中得字典,然后继续字典转模型。(YYModel的核心是通过runtime获取结构体中得Ivars的值,将此值定义为key,然后给key赋value值,所以我们需要自己遍历容器(NSArray,NSSet,NSDictionary),获取每一个值,然后KVC)。-具体的代码实现如下:&code class=&hljs objectivec has-numbering& style=&display: padding: 0 color: box-sizing: border- font-family: &Source Code Pro&,font-size: white-space: border-radius: 0 word-wrap: background:&&&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDictionary&/span& *json =[&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span& getJsonWithJsonName:@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&ContainerModel&&/span&];
ContainerModel *containModel = [ContainerModel yy_modelWithDictionary:json];
&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDictionary&/span& *dataDict = [containModel valueForKey:@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&data&&/span&];
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//定义数组,接受key为list的数组&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span&&span class=&hljs-variable& style=&color: rgb(102, 0, 102); box-sizing: border-&&.listArray&/span& = [dataDict valueForKey:@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&list&&/span&];
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//遍历数组&/span&
[&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span&&span class=&hljs-variable& style=&color: rgb(102, 0, 102); box-sizing: border-&&.listArray&/span& enumerateObjectsUsingBlock:^(&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&id&/span&
_Nonnull obj, NSUInteger idx, &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&BOOL&/span& * _Nonnull stop) {
&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDictionary&/span& *listDict =
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//获取数组中得字典&/span&
List *listModel = [List yy_modelWithDictionary:listDict];
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//获取count 和 id&/span&
&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *count = [listModel valueForKey:@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&count&&/span&];
&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&id&/span& = [listModel valueForKey:@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&id&&/span&];
&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right: 1px solid rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&/ul&-5.黑名单与白名单&code class=&hljs objectivec has-numbering& style=&display: padding: 0 color: box-sizing: border- font-family: &Source Code Pro&,font-size: white-space: border-radius: 0 word-wrap: background:&&&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@interface&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&User&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& NSUI
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@implementation&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&Attributes&/span&&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 如果实现了该方法,则处理过程中会忽略该列表内的所有属性&/span&
+ (&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSArray&/span& *)modelPropertyBlacklist {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& @[@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&test1&&/span&, @&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&test2&&/span&];
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 如果实现了该方法,则处理过程中不会处理该列表外的属性。&/span&
+ (&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSArray&/span& *)modelPropertyWhitelist {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& @[@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&name&&/span&];
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right: 1px solid rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&/ul&-6.数据校验与自定义转换实际这个分类的目的比较简单和明确。&就是对判断是否为时间戳,然后对时间戳进行处理,调用&_createdAt = [NSDate dateWithTimeIntervalSince1970:timestamp.floatValue];&获取时间。&code class=&hljs objectivec has-numbering& style=&display: padding: 0 color: box-sizing: border- font-family: &Source Code Pro&,font-size: white-space: border-radius: 0 word-wrap: background:&&&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// JSON:&/span&
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&name&&/span&:&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&Harry&&/span&,
&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&timestamp&&/span& : &span class=&hljs-number& style=&color: rgb(0, 102, 102); box-sizing: border-&&&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&//时间戳&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// Model:&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@interface&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&User&/span&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDate&/span& *createdAt;
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@implementation&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&User&/span&&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 当 JSON 转为 Model 完成后,该方法会被调用。&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 你可以在这里对数据进行校验,如果校验不通过,可以返回 NO,则该 Model 会被忽略。&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 你也可以在这里做一些自动转换不能完成的工作。&/span&
- (&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&BOOL&/span&)modelCustomTransformFromDictionary:(&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDictionary&/span& *)dic {
&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSNumber&/span& *timestamp = dic[@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&timestamp&&/span&];
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&if&/span& (![timestamp isKindOfClass:[&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSNumber&/span& class]]) &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& &span class=&hljs-literal& style=&color: rgb(0, 102, 102); box-sizing: border-&&NO&/span&;
_createdAt = [&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSDate&/span& dateWithTimeIntervalSince1970:timestamp&span class=&hljs-variable& style=&color: rgb(102, 0, 102); box-sizing: border-&&.floatValue&/span&];
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& &span class=&hljs-literal& style=&color: rgb(0, 102, 102); box-sizing: border-&&YES&/span&;
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 当 Model 转为 JSON 完成后,该方法会被调用。&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 你可以在这里对数据进行校验,如果校验不通过,可以返回 NO,则该 Model 会被忽略。&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 你也可以在这里做一些自动转换不能完成的工作。&/span&
- (&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&BOOL&/span&)modelCustomTransformToDictionary:(&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSMutableDictionary&/span& *)dic {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&if&/span& (!_createdAt) &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& &span class=&hljs-literal& style=&color: rgb(0, 102, 102); box-sizing: border-&&NO&/span&;
dic[@&span class=&hljs-string& style=&color: rgb(0, 136, 0); box-sizing: border-&&&timestamp&&/span&] = @(n&span class=&hljs-variable& style=&color: rgb(102, 0, 102); box-sizing: border-&&.timeIntervalSince1970&/span&);
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& &span class=&hljs-literal& style=&color: rgb(0, 102, 102); box-sizing: border-&&YES&/span&;
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right: 1px solid rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&li style=&box-sizing: border- padding: 0px 5&&26&/li&&li style=&box-sizing: border- padding: 0px 5&&27&/li&&li style=&box-sizing: border- padding: 0px 5&&28&/li&&li style=&box-sizing: border- padding: 0px 5&&29&/li&&li style=&box-sizing: border- padding: 0px 5&&30&/li&&li style=&box-sizing: border- padding: 0px 5&&31&/li&&li style=&box-sizing: border- padding: 0px 5&&32&/li&&/ul&需要注意的时,如果用插件,对时间戳类型或默认创建为NSUInteger类型,需要将其更改为NSDate类型。-7.Coding/Copying/hash/equal/description以下方法都是YYModel的简单封装,实际使用过程和系统方法区别不大。对其感兴趣的可以点进方法内部查看。&code class=&hljs objectivec has-numbering& style=&display: padding: 0 color: box-sizing: border- font-family: &Source Code Pro&,font-size: white-space: border-radius: 0 word-wrap: background:&&&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@interface&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&YYShadow&/span& :&span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&NSObject&/span& &&span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&NSCoding&/span&, &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&NSCopying&/span&&&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& (&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&nonatomic&/span&, copy) &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@property&/span& (&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&nonatomic&/span&, &span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&assign&/span&) &span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&CGSize&/span&
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&
&span class=&hljs-class& style=&box-sizing: border-&&&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@implementation&/span& &span class=&hljs-title& style=&box-sizing: border- color: rgb(102, 0, 102);&&YYShadow&/span&&/span&
&span class=&hljs-comment& style=&color: rgb(136, 0, 0); box-sizing: border-&&// 直接添加以下代码即可自动完成&/span&
- (&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&void&/span&)encodeWithCoder:(NSCoder *)aCoder {
[&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span& yy_modelEncodeWithCoder:aCoder];
- (&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&id&/span&)initWithCoder:(NSCoder *)aDecoder {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span& = [&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&super&/span& init];
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& [&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span& yy_modelInitWithCoder:aDecoder];
- (&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&id&/span&)copyWithZone:(NSZone *)zone {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& [&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span& yy_modelCopy];
- (NSUInteger)hash {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& [&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span& yy_modelHash];
- (&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&BOOL&/span&)isEqual:(&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&id&/span&)object {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& [&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span& yy_modelIsEqual:object];
- (&span class=&hljs-built_in& style=&color: rgb(102, 0, 102); box-sizing: border-&&NSString&/span& *)description {
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&return&/span& [&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&self&/span& yy_modelDescription];
&span class=&hljs-keyword& style=&color: rgb(0, 0, 136); box-sizing: border-&&@end&/span&&/code&&ul class=&pre-numbering& style=&box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right: 1px solid rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);&&&li style=&box-sizing: border- padding: 0px 5&&1&/li&&li style=&box-sizing: border- padding: 0px 5&&2&/li&&li style=&box-sizing: border- padding: 0px 5&&3&/li&&li style=&box-sizing: border- padding: 0px 5&&4&/li&&li style=&box-sizing: border- padding: 0px 5&&5&/li&&li style=&box-sizing: border- padding: 0px 5&&6&/li&&li style=&box-sizing: border- padding: 0px 5&&7&/li&&li style=&box-sizing: border- padding: 0px 5&&8&/li&&li style=&box-sizing: border- padding: 0px 5&&9&/li&&li style=&box-sizing: border- padding: 0px 5&&10&/li&&li style=&box-sizing: border- padding: 0px 5&&11&/li&&li style=&box-sizing: border- padding: 0px 5&&12&/li&&li style=&box-sizing: border- padding: 0px 5&&13&/li&&li style=&box-sizing: border- padding: 0px 5&&14&/li&&li style=&box-sizing: border- padding: 0px 5&&15&/li&&li style=&box-sizing: border- padding: 0px 5&&16&/li&&li style=&box-sizing: border- padding: 0px 5&&17&/li&&li style=&box-sizing: border- padding: 0px 5&&18&/li&&li style=&box-sizing: border- padding: 0px 5&&19&/li&&li style=&box-sizing: border- padding: 0px 5&&20&/li&&li style=&box-sizing: border- padding: 0px 5&&21&/li&&li style=&box-sizing: border- padding: 0px 5&&22&/li&&li style=&box-sizing: border- padding: 0px 5&&23&/li&&li style=&box-sizing: border- padding: 0px 5&&24&/li&&li style=&box-sizing: border- padding: 0px 5&&25&/li&&li style=&box-sizing: border- padding: 0px 5&&26&/li&&li style=&box-sizing: border- padding: 0px 5&&27&/li&&/ul&-二、ESJsonFormat与YYModel的结合使用彩蛋&给大家介绍一款插件,配合配图:&?使用方法:&快捷键:shift + control + J&插件安装方法比较简单,在此不赘述,不知道可自行google。好处:可以直接将json数据复制,ESJsonFormat会根据数据类型自动生成属性。(建议还是要自行检查,比如时间戳,系统会默认帮你生成为NSUInteger,而我们想要的为NSDate类型)对于多模型嵌套,不必创建多个文件,ESJsonFormat会自动在一个文件下创建多重类型,极其便捷。-&至此YYModel的使用已讲解完毕,关于YYModel的底层核心是运用runtime获取类结构体中Ivars,进行KVC操作,然后根据不同情况进行分别处理。&此处只是传递给大家一个概念,不展开讲解,网上有很多源码分析文章,可自学google学习。&
本文已收录于以下专栏:
相关文章推荐
文档地址:/ibireme/YYModel
NSDictionary *testDic = @{@&groupId&:@&01&,
关于YYModel的性能,一张图带你看懂
高性能: 模型转换性能接近手写解析代码。
自动类型转换: 对象类型可以自动转换,详情见下方表格。
类型安全: 转换过程中,所有的数据类型都会被...
时间  16:28:16  Garan
原文  //yymodel/
主题 iOS开发
花了点时间,拜读了下大神的YYmodel 库。怎么说,抛砖引玉吧,写一下自己的一点心得。不当之处,还望多多指正。
       库结构:
   
     
    ...
1.最简单的 Model 与 Json (字典)转换,直接调用 YYModel 的 类方法:
yy_modelWithDictionary: , 代码如下:
Book *book = [Boo...
一YYModel的使用场景
简单的 Model 与 JSON 相互转换
Model 属性名和 JSON 中的 Key 不相同
Model 包含其他 Model
容器类属性
黑名单与白名单
数据校验与自...
利用 YYModel 对嵌套模型进行解析:
    1.最外层:provinceModel(省模型) : NSString *province ,
NSArray *children (里面装的是...
闲来无事, 想到之前面试时有问到bounds和frame的区别的问题,索性就写了一个简单的控件,验证一下,大家请看下图:
从打印的坐标可以看出, frame和bounds的区别就是在于x坐标及y坐标...
原文链接:/p/25e678fa43d3
demo链接:/walkertop/YYModel---Demo
开篇说明...
YYKit是集大成者的第三方表现,堪称国内最优秀的框架。因此,在YYKit中有太多的技术点值得挖掘思考,本文用来记录YYKit源码阅读中的心得以及认为有价值的技术点
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 YY 的文章

 

随机推荐