前一个月,我接触到了Mantle,由于项目采用的是MVC的设计模式,选用好的model也是至关重要的。先介绍下Mantle的使用吧。

首先定义好数据模型:

@property (nonatomic, copy)    NSString  *address;

@property (nonatomic, copy)    NSString  *contact_info;

@property (nonatomic, copy)    NSString  *contact_name;

@property (nonatomic, assign)    NSInteger  id;

@property (nonatomic, copy)    NSString  *oppen_time;

@property (nonatomic, copy)    NSString  *project_id;

@property (nonatomic, copy)    NSString  *project_name;

@property (nonatomic, copy)    NSString  *project_situation;

@property (nonatomic, copy)    NSString  *title_name;

@property (nonatomic, copy)    NSString  *url;

然后.m文件中实现如下方法:

+(NSDictionary *)JSONKeyPathsByPropertyKey{

return @{};

}

使用

_biddingModel=[MTLJSONAdapter modelOfClass:[TTBiddingModel class] fromJSONDictionary:dic error:nil];

会什么会return呢?后面我会讲到。

参考了《为什么唱吧iOS6.0选择了Mantle》http://www.cocoachina.com/ios/20141016/9931.html

JSONKeyPathsByPropertyKey这个协议方法是将返回json中的内容序列化

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
        @"identifier": @"id",
        @"displayDiscription": @"description",
        @"thisIsANewShit": @"newShit",
        @"creativeProduct": @"copyToChina",
        @"betterPropertyName": @"m_wired_propertyName"
    }
}
对属性名进行自动转换。
 
so为什么我会return{}呢,我们来看一看mantle的源代码
首先它定义了这样一个属性

@property (nonatomic, copy, readonly) NSDictionary *JSONKeyPathsByPropertyKey;

此时_JSONKeyPathsByPropertyKey就是我们刚刚用到的+ (NSDictionary *)JSONKeyPathsByPropertyKey {};

_JSONKeyPathsByPropertyKey = [[modelClass JSONKeyPathsByPropertyKey] copy];

init 方法里面

- (id)initWithModel:(MTLModel<MTLJSONSerializing> *)model {

NSParameterAssert(model != nil);

self = [super init];

if (self == nil) return nil;

_model = model;

_modelClass = model.class;

_JSONKeyPathsByPropertyKey = [[model.class JSONKeyPathsByPropertyKey] copy];

return self;

}

这里我cocopods的Mantle是1.5版本的,而最新的2.0.2版本舍去掉了如下方法:

- (NSString *)JSONKeyPathForPropertyKey:(NSString *)key {

NSParameterAssert(key != nil);

id JSONKeyPath = self.JSONKeyPathsByPropertyKey[key];

if ([JSONKeyPath isEqual:NSNull.null]) return nil;

if (JSONKeyPath == nil) {

return key;

} else {

return JSONKeyPath;

}

}

所以,这就是我为什么会在协议方法里return {},这里应该很明白了吧,序列化时,它会自动匹配property定义的属性。有没有很方便呢?

关于Mantle使用个人的一些见解的更多相关文章

  1. 字典转模型框架 Mantle的使用:国外程序员最常用的iOS模型

    Mantle简介 Mantle 是iOS和Mac平台下基于Objective-C编写的一个简单高效的模型层框架. Mantle能做什么 Mantle可以轻松把JSON数据.字典(Dictionary) ...

  2. [OC笔记] Category分类之见解

    用过别的语言做过开发的同学都知道,如果你想扩充一个类,就应该去继承这个类.但是OC里面有更好的方法,那就是分类. 那什么是分类呢?就是在不改变原先类,我们可以在其中添加咱们自定义的方法,这样和同事合作 ...

  3. Moqui学习之代码分析mantle priceServices.xml

    <?xml version="1.0" encoding="UTF-8"?> <!-- This software is in the pub ...

  4. "!x++" 我之见解

    "!x++"之说,各人见解不同,但真理只有一个.我只尝试着说出一种见解,未知真相. 何如? "!x++"等价于"!(x++)". 理论分析 ...

  5. iOS的Mantle实战分析

    公司项目之前的model层代码是我使用JSON工具直接生成Objective-C代码的,当时还是觉得相当省事的,毕竟我经历过无model层的NSDictionary“黑暗”时期.但是随着项目的推进,问 ...

  6. Mantle 简单教程

    Mantle可以很方便的去书写一个模型层的代码. 使用它可以很方便的去反序列化JSON或者序列化为JSON(需要在MTLModel子类中实现<MTLJSONSerializing>协议) ...

  7. 谈谈自己对于Auth2.0的见解

    Auth的原理网上有很多,我这里就不在赘述了. 这里有张时序图我个人觉得是比较合理而且直观的,(感谢这篇博文:http://justcoding.iteye.com/blog/1950270) 参照这 ...

  8. Qt见解:Post 与 Get 的区别(Get将参数直接与网址整合为一个整体,而Post则将其拆为两个部分)

    第一次接触Qt的Http项目,今天看了一下Post和Get的基本使用方法,就开始尝试了.原先以为Post专门用于向服务器发送请求,然后接收服务器应答的: 而Get只是单纯从服务器获取资源,比如下载这个 ...

  9. IT见解

    IT见解 北京海淀区  2014-10-18   张俊浩 *域名的市值在走低,因其功能被新浪.腾讯微博.微信大V这种账号所代替 *小米将自己定位为互联网公司,而不是手机公司 *手机不远的未来会成为公共 ...

随机推荐

  1. Codeforces 10A-Power Consumption Calculation(模拟)

    A. Power Consumption Calculation time limit per test 1 second memory limit per test 256 megabytes in ...

  2. Flutter 1.5 发布,正式成为全平台 UI 框架!

    一. 序 在 Google I/O 2019 上,Dart 团队宣布推出新的 Flutter 稳定版本 1.5,这是 Flutter 迄今为止最大的一次版本发布. 伴随着 Flutter 1.5 的发 ...

  3. ubuntu12.04下CKermit与开发板交互环境搭建

    CKermit蛮好的一个调试工具!就像在windows下的telnet,但是还是折腾了一下,现在看来,非常容易,其实我主要是在开发板为正常工作的情况下,以为是CKermit的问题,其实是我开发板开机设 ...

  4. SPOJ 694/705 后缀数组

    思路: 论文题*n Σn-i-ht[i]+1 就是结果 O(n)搞定~ //By SiriusRen #include <cstdio> #include <cstring> ...

  5. Java 以空格分割字符串

    Java中使用类似于 str.split("/"); 的方法可以很方便的实现将一个字符串分割为数组, 但是如果分隔符是一个(或几个)空格呢?? 我们的本能反应或许应该是 str.s ...

  6. Gradle学习总结

    Gradle学习系列 (1). Gradle快速入门 (2). 创建Task的多种方法 (3). 读懂Gradle语法 (4). 增量式构建 (5). 自定义Property (6). 使用java ...

  7. js正则学习小计

    //元字符 {} () ^ $ . ? + //预定义字符 \d \D \w \W \s \S //量词 {n,m} {n} {n,} + ? * //贪婪和惰性 //反向引用 //分组 //候选 / ...

  8. windows py-faster-rcnn配置

    [原创帖!转载请注明] windows faster-rcnn安装一直会出现各种错误,本人在实验室电脑成功安装后,在自己电脑上同样的安装步骤也成功.所以做个总结,希望对大家有帮助. 一:安装环境 1. ...

  9. 理解ZBrush中的透明度

    Alpha(透明度)是ZBrush 4R8实际工作中使用频率很高的一个控制模块,它主要用于细化模型纹理及贴图绘制,该工具提供了丰富的笔触形状,使用这些笔触形状可以绘制出各种各样的效果,如下图所示. 这 ...

  10. asp.net core 与EFcore 入门

    什么是EFcore? Entity Framework (EF) Core 是轻量化.可扩展和跨平台版的常用 Entity Framework 数据访问技术,EF Core 可用作对象关系映射程序 ( ...