为什么使用Mantle
项目地址: https://github.com/Mantle/Mantle
今年上半年在两个项目中都将Model层替换为Mantle,大大减少了开发中实体转换的时间;选择mantle的初衷是因为看到了大神的blog,里面的应用场景也是在开发中我们经常遇到的情况:
iWangKe.me - 为什么唱吧iOS 6.0选择了Mantle
对比一下
1 | # http://bubbler.labs.douban.com/j/user/wheats |


You should know:
- 使用Mantle需要继承MTLModel
- 如果需要将实体中的某个字段映射成一个实体或者实体的数组,需要继承MTLJSONSerializing
- Mantle需要一个字典来讲字典中的字段与实体的字段进行匹配
将JSON转换为制定的Model
1 | MDoubanUser *allModel = [MTLJSONAdapter modelOfClass:[MDoubanUser class] fromJSONDictionary:rstlDict] error:nil] |
将JSON中的数组转换为Model的数组
1 | NSArray *users = [MTLJSONAdapter modelsOfClass:[MDoubanUser class] fromJSONArray:userArray error:nil]; |
将某个字段对应到某个实体
1 | +(NSValueTransformer *)JSONTransformerForKey:(NSString *)key{ |
自定义转换
自定义转换只要定义一个字段名+JSONTransformer结尾的方法,就会执行我们自定义的转换,比如时间格式化,对某些字符进行一些操作处理
1 | # 将uid前面加上"Author" |
多个字段对应
在项目中,经常遇到,接口A返回的用户id字段说uid,接口B返回的用户字段是ID,这种情况我们只需要中Model中将两个字段存到一个数组绑定到同一个属性上就可以了
1 | + (NSDictionary *)JSONKeyPathsByPropertyKey |
将实体中的值封装成一个dictionary,方便接口传输
1 | #使用全部的字段 |
最后
在项目的开发过程中,我抽时间做了一个小工具,可以方便的将JSON转换为Mantle支持的Model类,希望对你们有帮助
Source: https://github.com/TimeBots/ModelBot
Download: ModelBot Download
