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可以讓你很容易的寫出一個(gè)簡(jiǎn)單的模型乐设,github如是說(shuō)怪与。它提供了一個(gè)轉(zhuǎn)換模型的方法锋谐,根據(jù)自定義的屬性映射關(guān)系進(jìn)行序列化和反序列化饼齿,簡(jiǎn)單的說(shuō)就是字段轉(zhuǎn)換。
How to use it?
首先剪侮,如果你希望使用Mantle中的各種方法肢础,那么你所創(chuàng)建出來(lái)的模型必須繼承于MTLModel聚假,并且遵從協(xié)議<MTLJSONSerializing>。
MTLJSONSerializing
當(dāng)model遵從協(xié)議MTLJSONSerializing后机蔗,通過(guò)MTLJSONAdapter可以將一條JSON數(shù)據(jù)映射成為model類蒲祈。
WeatherModel *test = [MTLJSONAdapter modelOfClass:WeatherModel.class fromJSONDictionary:dict error:nil];
還有個(gè)方法,可以將model轉(zhuǎn)換為JSON類型
- (NSDictionary *)JSONDictionaryFromModel:(id<MTLJSONSerializing>)model error:(NSError **)error; // model 轉(zhuǎn)換為 json
字段轉(zhuǎn)換
這是一個(gè)必須實(shí)現(xiàn)的方法 + (NSDictionary *) JSONKeypathsByPropertyKey;
+ (NSDictionary *)JSONKeyPathsByPropertyKey{ return @{@"memberID" : @"id", @"mobilePhone" : @"phone", @"createDate" : @"date" }; }
如上面這個(gè)例子萝嘁,指的是客戶端這邊的memberID字段對(duì)應(yīng)服務(wù)端返回的數(shù)據(jù)id字段梆掸。
?注意:本地字段在前,服務(wù)端字段在后牙言。完成這個(gè)方法就代表著當(dāng)進(jìn)行序列化或反序列化時(shí)酸钦,就會(huì)根據(jù)這個(gè)映射關(guān)系來(lái)進(jìn)行。
類型轉(zhuǎn)換
類型轉(zhuǎn)換的方法命名規(guī)則為 ***+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]; }]; }
另外對(duì)于BOOL和NSURL類型有更快捷的方法
+ (NSValueTransformer *)urlJSONTransformer{ return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName]; } + (NSValueTransformer *)isVipJSONTransformer{ return [NSValueTransformer valueTransformerForName:MTLBooleanValueTransformerName]; }
空對(duì)象處理
如果服務(wù)端返回空的值咱枉,運(yùn)行結(jié)果必然crash卑硫,Mantle為此提供了解決辦法。
- (void)setNilValueForKey:(NSString *)key;