摘要:可以很方便的去书写一个模型层的代码。使用它可以很方便的去反序列化或者序列化为需要在子类中实现协议使用一个解释器去转换模型对象。把转换为模型对象将模型对象转为字典这个方法返回一个字典,指定着你的模型对象和中关键字的映射关系。
Mantle可以很方便的去书写一个模型层的代码。
使用它可以很方便的去反序列化JSON或者序列化为JSON(需要在MTLModel子类中实现
使用一个解释器MTLJSONAdapter去转换模型对象。
NSError *error = nil; MyObject *myObject = [MTLJSONAdapter modelOfClass:MyObject.class fromJSONDictionary:JSONDictionary error:&error]; //把JSONDictionary转换为模型对象 NSDictionary *JSONDictionary = [MTLJSONAdapter JSONDictionaryFromModel:myObject]; //将模型对象转为JSON字典+JSONKeyPathsByPropertyKey
这个方法返回一个字典,指定着你的模型对象和JSON中关键字的映射关系。
一个例子:
@interface XYUser : MTLModel @property (readonly, nonatomic, copy) NSString *name; @property (readonly, nonatomic, strong) NSDate *createdAt; @property (readonly, nonatomic, assign, getter = isMeUser) BOOL meUser; @end @implementation XYUser + (NSDictionary *)JSONKeyPathsByPropertyKey { return @{ @"createdAt": @"created_at", //这里代表createdAt属性映射JSON中的created_at关键字 @"meUser": NSNull.null //meUser不会从JSON中反序列化 }; } @end
当我们用字典反序列化的时候
NSDictionary *JSONDictionary = @{ @"name": @"john", @"created_at": @"2013/07/02 16:40:00 +0000", @"plan": @"lite" }; XYUser *user = [MTLJSONAdapter modelOfClass:XYUser.class fromJSONDictionary:JSONDictionary error:&error]; //user中的name为john createdAt为2013/07/02 16:40:00 +0000 meUser为0 plan将会被忽略+JSONTransformerForKey:
实现这个方法去用一个不一样的类型转换器去转化属性
+ (NSValueTransformer *)JSONTransformerForKey:(NSString *)key { if ([key isEqualToString:@"createdAt"]) { return [NSValueTransformer valueTransformerForName:XYDateValueTransformerName]; } return nil; }
对于一些值的转换:
+ (NSValueTransformer *)createdAtJSONTransformer { return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSString *str) { return [self.dateFormatter dateFromString:str]; } reverseBlock:^(NSDate *date) { return [self.dateFormatter stringFromDate:date]; }]; }+classForParsingJSONDictionary:
如果定义了一个类簇,可以实现这个方法去转换。
@interface XYMessage : MTLModel @end @interface XYTextMessage: XYMessage @property (readonly, nonatomic, copy) NSString *body; @end @interface XYPictureMessage : XYMessage @property (readonly, nonatomic, strong) NSURL *imageURL; @end @implementation XYMessage + (Class)classForParsingJSONDictionary:(NSDictionary *)JSONDictionary { if (JSONDictionary[@"image_url"] != nil) { return XYPictureMessage.class; } if (JSONDictionary[@"body"] != nil) { return XYTextMessage.class; } NSAssert(NO, @"No matching class for the JSON dictionary "%@".", JSONDictionary); return self; } @end
使用
NSDictionary *textMessage = @{ @"id": @1, @"body": @"Hello World!" }; NSDictionary *pictureMessage = @{ @"id": @2, @"image_url": @"http://example.com/lolcat.gif" }; XYTextMessage *messageA = [MTLJSONAdapter modelOfClass:XYMessage.class fromJSONDictionary:textMessage error:NULL]; XYPictureMessage *messageB = [MTLJSONAdapter modelOfClass:XYMessage.class fromJSONDictionary:pictureMessage error:NULL];数据的持久化
MTLModel已经遵循了
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/15432.html
摘要:配合储存方法注意对于类,我们并不需要对它做任何的处理。唯一性检查同样是实现中的一个方法表示当插入新数据的时候,对比需要插入的这条数据的字段的值是否和数据库中的有相同。这样带来的方便之处显而易见。 在开始之前,我们先创建一个名为MemberManaged的实体showImg(https://segmentfault.com/img/bVkmFI); MemberManaged.h...
摘要:与相对,与传统意义上的通用编程语言以及完全不同。在上一节讲到的其实可以被称为外部而这里即将谈到的嵌入式也有一个别名,内部。 最近在公司做了一次有关 DSL 在 iOS 开发中的应用的分享,这篇文章会简单介绍这次分享的内容。 因为 DSL 以及 DSL 的界定本身就是一个比较模糊的概念,所以难免有与他人观点意见相左的地方,如果有不同的意见,我们可以具体讨论。 这次文章的题目虽然是谈谈...
摘要:看到一份很赞的学习资料,由于文章字数限制,分两篇分享原文学习资料整理简介主要对当前排名前的项目做一个简单的简介方便初学者快速了解到当前在的情况项目名称项目信息作者是的博主开发界的大神级人物毕业于卡内基梅隆大学开源了许多牛逼的项目这个便是其 看到一份很赞的IOS学习资料,由于SF文章字数限制,分两篇分享 原文 iOS 学习资料整理 GitHub Top 50 简介 主要对当前 Git...
摘要:继续进行优秀开源框架的源码学习,这次打算学习一些常用的解析的框架,比如,,等。这句代码也就是递归思想的提现,如果这个成员变量是一个自定义类的,那么该成员变量对应的值应该也是一个,所以用这个二级的类继续调用方法,继续解析下去。 继续进行优秀开源框架的源码学习,这次打算学习一些常用的model解析的框架,比如YYModel,MJExtension,Mantle等。我自己用过YYModel和...
阅读 1728·2021-11-25 09:43
阅读 683·2021-11-23 09:51
阅读 724·2021-11-18 10:02
阅读 1491·2021-09-10 11:27
阅读 2967·2021-09-10 10:51
阅读 646·2019-08-29 15:13
阅读 1876·2019-08-29 11:32
阅读 2365·2019-08-29 11:25