Mantle学习笔记

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

当model遵从协议MTLJSONSerializing后,通过MTLJSONAdapter可以将一条JSON数据映射成为model类。

WeatherModel *test = [MTLJSONAdapter modelOfClass:WeatherModel.class fromJSONDictionary:dict error:nil];

还有个方法,可以将model转换为JSON类型

  • (NSDictionary *)JSONDictionaryFromModel:(id)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;

你可能感兴趣的:(Mantle学习笔记)