What is Mantle?
https://github.com/Mantle/Mantle
Mantle makes it easy to write a simple model layer for your Cocoa or Cocoa Touch application.
Mantle可以让你很容易的写出一个简单的模型,github如是说。它提供了一个转换模型的方法,根据自定义的属性映射关系进行序列化和反序列化,简单的说就是字段转换。
How to use it?
首先,如果你希望使用Mantle中的各种方法,那么你所创建出来的模型必须继承于MTLModel,并且遵从协议<MTLJSONSerializing>。
MTLJSONSerializing
当model遵从协议MTLJSONSerializing后,通过MTLJSONAdapter可以将一条JSON数据映射成为model类。
WeatherModel *test = [MTLJSONAdapter modelOfClass:WeatherModel.class fromJSONDictionary:dict error:nil];
还有个方法,可以将model转换为JSON类型
- (NSDictionary *)JSONDictionaryFromModel:(id<MTLJSONSerializing>)model error:(NSError **)error; // model 转换为 json
字段转换
这是一个必须实现的方法 + (NSDictionary *) JSONKeypathsByPropertyKey;
+ (NSDictionary *)JSONKeyPathsByPropertyKey{ return @{@"memberID" : @"id", @"mobilePhone" : @"phone", @"createDate" : @"date" }; }
如上面这个例子,指的是客户端这边的memberID字段对应服务端返回的数据id字段。
⚠注意:本地字段在前,服务端字段在后。完成这个方法就代表着当进行序列化或反序列化时,就会根据这个映射关系来进行。
类型转换
类型转换的方法命名规则为 ***+JSONTransformer
+ (NSValueTransformer *)updatedAtJSONTransformer { return [MTLValueTransformer transformerUsingForwardBlock:^id(NSString *dateString, >BOOL *success, NSError *__autoreleasing *error) { return [self.dateFormatter dateFromString:dateString]; } reverseBlock:^id(NSDate *date, BOOL *success, NSError *__autoreleasing *error) { return [self.dateFormatter stringFromDate:date]; }]; }
另外对于BOOL和NSURL类型有更快捷的方法
+ (NSValueTransformer *)urlJSONTransformer{ return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName]; } + (NSValueTransformer *)isVipJSONTransformer{ return [NSValueTransformer valueTransformerForName:MTLBooleanValueTransformerName]; }
空对象处理
如果服务端返回空的值,运行结果必然crash,Mantle为此提供了解决办法。
- (void)setNilValueForKey:(NSString *)key;