<!–markdown–>#什么是Mantle
Mantle是由于Github团队开发的,目的是去除Objective-C把JSON数据转为NSObject子类的所有样板代码。Mantle也能做数据转换,通过一种神奇的方式把JSON原始数据(strings, ints, floats)转换为复杂数据,比如NSDate, NSURL, 甚至是自定义类。
#Github地址
https://github.com/Mantle/Mantle
#令人(我)兴奋的功能
1.绑定JSON(dict,class)数据
<p><!–more–></p>
只要在model类里实现 JSONKeyPathsByPropertyKey.你就可以实现将model类里的属性与JSON或dict里的任意路径的节点绑定,如下代码
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return @{
@"date": @"dt",
@"windSpeed": @"wind.speed",
};
}
2.JSON数据的转换
想像一下,服务端返回给我们一串图片url,我们只需要实现一个公式,Mantle就会自动将url转换成uiimage.
以后,我们使用 这个model类的时候就只要 model.image就可以得到一个uiimage图片,是不是很酷?实现代码如下
方法名约定为 + (NSValueTransformer *)属性名JSONTransformer
然后调用MTLValueTransformer ,实现双向转换即可
+ (NSValueTransformer *)iconJSONTransformer {
return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSString *value) {
return [UIimage initWithURl:value];
} reverseBlock:^(UIImage *img) {
return [uiimage geturl];
}];
}
或者,直接实现单向转换
+ (NSValueTransformer *)JSONTransformerForKey:(NSString *)key {
if ([key isEqualToString:@"createdAt"]) {
return [NSValueTransformer valueTransformerForName:XYDateValueTransformerName];
}
return nil;
}
3.classForParsingJSONDictionary
从json,dictionry解析出class?没用过。。。官方API
If you are implementing a class cluster, implement this optional method to determine which subclass of your base class should be used when deserializing an object from JSON.
这是从json中确定哪个子类?
+ (Class)classForParsingJSONDictionary:(NSDictionary *)JSONDictionary {
if (JSONDictionary[@"image_url"] != nil) {
return XYPictureMessage.class;
}
if (JSONDictionary[@"body"] != nil) {
return XYTextMessage.class;
}
NSAssert(NO, @"No matching class for the JSON dictionary '%@'.", JSONDictionary);
return self;
}
