iOS 第三方库 Mantle

 

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 &amp;&amp; (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

 

发表评论?

2 条评论。

  1. 看了大有收获,真的没有白来!

  2. 锋哥!神往已久!挺崇拜您的!用了您的东西!希望您能回个信!

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>