文档章节

github-YYModel

BKF_
 BKF_
发布于 2016/03/02 23:18
字数 573
阅读 827
收藏 0

这里是简单描述---详情

0.使用原因:

    1)Benchmark测试的时候,速度块
    2)代码量少,以前一直用 MJExtension
    3)使用简单方便。
    
1.使用方法(github上比较详细)
    1.1简单的 Model 与 JSON 相互转换
        1)将 JSON (NSData,NSString,NSDictionary) 转换为 Model:
        User *user = [User yy_modelWithJSON:json];

        2)将 Model 转换为 JSON 对象:
        NSDictionary *json = [user yy_modelToJSONObject];

        3)Model 属性名和 JSON 中的 Key 不相同
        // Model: Book
        //在model类中实现一个静态方法,返回一个 Dict,将 Model 属性名对映射到 JSON 的 Key。
        + (NSDictionary *)modelCustomPropertyMapper {
                return @{@"name" : @"n",
                         @"page" : @"p",
                         @"desc" : @"ext.desc",
                         @"bookID" : @[@"id",@"ID",@"book_id"]};
        }

        4)Model 包含其他 Model
        Model: 什么都不用做,转换会自动完成


    1.2容器类属性
    返回容器类中的所需要存放的数据类型 (以 Class 或 Class Name 的形式)。
    + (NSDictionary *)modelContainerPropertyGenericClass {
            return @{
                        @"shadows" : [Shadow class],
                     @"borders" : Border.class,
                     @"attachments" : @"Attachment" };
        }

    1.3黑名单与白名单
        // 如果实现了该方法,则处理过程中会忽略该列表内的所有属性
        + (NSArray *)modelPropertyBlacklist {
                return @[@"test1", @"test2"];
        }
        // 如果实现了该方法,则处理过程中不会处理该列表外的属性。
        + (NSArray *)modelPropertyWhitelist {
                return @[@"name"];
        }

    1.4数据校验与自定义转换
 

// JSON:
{
    "name":"Harry",
    "timestamp" : 1445534567
}

// Model:
@interface User
@property NSString *name;
@property NSDate *createdAt;
@end

@implementation User
// 当 JSON 转为 Model 完成后,该方法会被调用。
// 你可以在这里对数据进行校验,如果校验不通过,可以返回 NO,则该 Model 会被忽略。
// 你也可以在这里做一些自动转换不能完成的工作。
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic {
    NSNumber *timestamp = dic[@"timestamp"];
    if (![timestamp isKindOfClass:[NSNumber class]]) return NO;
    _createdAt = [NSDate dateWithTimeIntervalSince1970:timestamp.floatValue];
    return YES;
}

// 当 Model 转为 JSON 完成后,该方法会被调用。
// 你可以在这里对数据进行校验,如果校验不通过,可以返回 NO,则该 Model 会被忽略。
// 你也可以在这里做一些自动转换不能完成的工作。
- (BOOL)modelCustomTransformToDictionary:(NSMutableDictionary *)dic {
    if (!_createdAt) return NO;
    dic[@"timestamp"] = @(n.timeIntervalSince1970);
    return YES;
}
@end

Coding/Copying/hash/equal/description

@interface YYShadow :NSObject <NSCoding, NSCopying>
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) CGSize size;
@end

@implementation YYShadow
// 直接添加以下代码即可自动完成
- (void)encodeWithCoder:(NSCoder *)aCoder { [self yy_modelEncodeWithCoder:aCoder]; }
- (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; return [self yy_modelInitWithCoder:aDecoder]; }
- (id)copyWithZone:(NSZone *)zone { return [self yy_modelCopy]; }
- (NSUInteger)hash { return [self yy_modelHash]; }
- (BOOL)isEqual:(id)object { return [self yy_modelIsEqual:object]; }
- (NSString *)description { return [self yy_modelDescription]; }

© 著作权归作者所有

共有 人打赏支持
上一篇: 1.NSString+category
下一篇: github 上常用的
BKF_
粉丝 1
博文 21
码字总数 4291
作品 0
广州
私信 提问
从YYModel源码中可以学到什么:前篇

前言 一个高性能模型框架。 作者在上给出的性能对比图(iphone 6 y:时间) :具体以下特点:高性能、自动类型转换、类型安全、非侵入性、轻量等。 关于如何使用查看文档和示例【传送门】。 本...

Owenli_千
2017/12/29
0
0
iOS JSON 模型转换库评测

iOS 开发中总会用到各种 JSON 模型转换库,这篇文章将会对常见的几个开源库进行一下评测。评测的内容主要集中在性能、功能、容错性这几个方面。 评测的对象: Manually 手动进行 JSON/Model...

hejunbinlan
2016/01/13
47
0
又一个高性能轻量级的iOS模型框架YYModel

前言 iOS的模型框架其实有很多了,去年研究过,也了解过、,最近的项目项目优化的时候,再次考虑,基于轻量级、高性能的考虑,最终选择了。 项目主页 YYModel 简介 YYModel在Github的简介是,...

刘星石
2016/03/29
438
0
从YYModel源码中可以学到什么:后篇

前言 上一篇中《从YYModel源码中可以学到什么:后篇》中主要学习了的源码结构,只是分享了整体结构。 承接上篇,本文将解读如何进行JSON模型转换的,接下来一起揭开的神秘面纱吧! 目录 JSON...

Owenli_千
2017/12/29
0
0
YYModel的介绍与使用

最近有时间就来看看之前一直想了解的YYModel,下面开始直奔主题。 介绍 iOS / OSX高性能模型框架。(YYmodel是来自组件YYKit) 性能 时间成本(过程GithubUser 10000次iPhone 6): 1-0.png Manu...

宵衣旰食
2016/11/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day152-2018-11-19-英语流利阅读-待学习

外媒看吴亦凡刷榜事件 Lala 2018-11-19 1.今日导读 近日,吴亦凡的专辑在国外陷入了刷榜风波,他的新专辑霸占了单曲榜前三名,并且前十名他占据了七席,力压美国乐坛巨星 Lady Gaga 和 A 妹,...

飞鱼说编程
32分钟前
5
0
开源 java CMS - FreeCMS2.8 微信管理 群发图文消息

项目地址:http://www.freeteam.cn/ 群发图文消息 管理员可以在这里群发图文消息 此列表只提取已审核并且带信息图片的数据! 选择需要群发的消息,点击“群发图文消息”按钮。 微信的限定: ...

freeteam
41分钟前
1
0
Beautiful Soup

定义 Python中的一个库,主要用于从网页爬取数据; 安装 pip install beautifulsoup4 四大对象 Beautiful Soup将复杂的HTML文档转换成树形结构,树中的每个节点都是Python对象,对象可归纳为...

村雨1943
52分钟前
4
0
Visual Studio 昨日发布新版本:增加实时同步编程、共同调试

多名开发者可以在同一个项目中编程,在编写代码和调试代码时只需发送一个 URL 网址,就能邀请他人参与协作,而且无需重新配置开发环境和安装任何附加包。该服务支持 Windows、Mac 与 Linux ...

linuxCool
55分钟前
5
0
发现一种不错的学习方法

这是在《软技能,代码之外的生存之道》所看到的一种学习方法,感觉这个理念不错,分享出来,共勉。 我的「十步学习法」 多年以来,我都承受着巨大的压力:快速学习新技术、新编程语言、新框架...

firepation
55分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部