Mantle 主要是简化ios中model层的第三方库,我们在项目中大量的定义和使用model,而Mantle所做的就是让我们更方便的使用model。 Mantle 目前也是我们通讯框架中最要的组成部分
直接上代码吧
HVProjectInfoModel.h
#import <Mantle/Mantle.h> @class HVVenueWeekTimesModel; @interface HVProjectInfoModel : MTLModel <MTLJSONSerializing> // projectid 项目id //(String) @property(nonatomic, strong) NSString* projectid; // 项目名称 //(String) @property(nonatomic, strong) NSString* projectName; // //(List) @property(nonatomic, strong) NSArray<HVVenueWeekTimesModel*>* scene; + (HVProjectInfoModel*) modelFromDictionary:(NSDictionary*)dict; + (NSArray<HVProjectInfoModel*>*) modelsFromArray:(NSArray<NSDictionary*>*)array; - (NSDictionary*) dictionary; @end
MTLJSONSerializing协议包含了一下内容
@protocol MTLJSONSerializing @required + (NSDictionary *)JSONKeyPathsByPropertyKey; @optional + (NSValueTransformer *)JSONTransformerForKey:(NSString *)key; + (Class)classForParsingJSONDictionary:(NSDictionary *)JSONDictionary; @end
+ (NSDictionary *)JSONKeyPathsByPropertyKey; 告知model中和nsdictioary的key对应关系(支持多级关系哦)。
+JSONTransformerForKey:方法指定了如何将一个JSON值转换为指定的属性值。反过来,转换器也用于将属性值转换成JSON值。如果转换器实现了+JSONTransformer方法,则MTLJSONAdapter会使用这个具体的方法,而不使用+JSONTransformerForKey:方法。另外,如果不需要执行自定义的转换,则返回nil。
上述头文件中定义了几个字段和3个项目中可能所需要用到的方法并对其进行实现
#import "HVProjectInfoModel.h" #import "HVVenueWeekTimesModel.h" @implementation HVProjectInfoModel + (NSDictionary *)JSONKeyPathsByPropertyKey { return @{ @"projectid":@"projectid", @"projectName":@"projectName", @"scene":@"scene" }; } + (NSValueTransformer *)JSONTransformerForKey:(NSString *)key { //对空字符串的处理 if ( [key isEqualToString:@"projectid"] || [key isEqualToString:@"projectName"] ) { return [MTLValueTransformer transformerUsingForwardBlock:^id(NSString* str, BOOL *success, NSError *__autoreleasing *error) { if(str!=NULL && (NSNull*)str!=[NSNull null]) { return str; } return @""; }]; } //子model-array嵌套 else if ([key isEqualToString:@"scene"]) { //嵌套转换的处理 return [MTLValueTransformer transformerUsingForwardBlock:^id(NSArray* array, BOOL *success, NSError *__autoreleasing *error) { return [HVVenueWeekTimesModel modelsFromArray:array]; } reverseBlock:^id(id value, BOOL *success, NSError *__autoreleasing *error) { //嵌套逆向转换的处理 return [MTLJSONAdapter JSONArrayFromModels:value error:error]; }]; } return nil; } + (HVProjectInfoModel*) modelFromDictionary:(NSDictionary*)dict { return [MTLJSONAdapter modelOfClass:[HVProjectInfoModel class] fromJSONDictionary:dict error:nil]; } + (NSArray<HVProjectInfoModel*>*) modelsFromArray:(NSArray<NSDictionary*>*)array { return [MTLJSONAdapter modelsOfClass:[HVProjectInfoModel class] fromJSONArray:array error:nil]; } - (NSDictionary*) dictionary { return [MTLJSONAdapter JSONDictionaryFromModel:self error:nil]; } @end
经过我的几个项目的实际使用,Mantle非常方便的处理了model和json或者dict之间的关系,并实现互转。
下面列举一下常用的方法。
1、 将mtlmodel对象转为换dictionary对象
[MTLJSONAdapter JSONDictionaryFromModel:self error:nil]
2、 dictionary转为mtlmodel对象
返回单个mtmodel* [MTLJSONAdapter modelOfClass:[mtlmodel映射的 class] fromJSONDictionary:dictionary error:nil];
将
返回NSArray<mtlmodel*> [MTLJSONAdapter modelsOfClass:[mtlmodel映射的 class] fromJSONArray:array<dictionary*> error:nil];
看运行效果
NSDictionary
HVProjectInfoModel
看了大有收获,真的没有白来!
锋哥!神往已久!挺崇拜您的!用了您的东西!希望您能回个信!