资讯专栏INFORMATION COLUMN

Mantle使用

BigNerdCoding / 1847人阅读

摘要:可以很方便的去书写一个模型层的代码。使用它可以很方便的去反序列化或者序列化为需要在子类中实现协议使用一个解释器去转换模型对象。把转换为模型对象将模型对象转为字典这个方法返回一个字典,指定着你的模型对象和中关键字的映射关系。

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已经遵循了协议,所以可以NSKeyedArchiver归档这个模型对象。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15432.html

相关文章

  • Mantle

    摘要:因为这涉及到序列化和反序列化的问题。注意本地字段在前,服务端字段在后。也就是说方法中返回的字典,必须写。相关还提供了一个专门操作的类,其中包括有些非常有用的方法,比如唯一性检查实体属性转换等。下一篇博文我将着重讲述配合的使用。 Mantle是什么? GitHub上的介绍是: Model framework for Cocoa and Cocoa Touch 这是一个模型框...

    CoreDump 评论0 收藏0
  • MagicalRecord配合Mantle

    摘要:配合储存方法注意对于类,我们并不需要对它做任何的处理。唯一性检查同样是实现中的一个方法表示当插入新数据的时候,对比需要插入的这条数据的字段的值是否和数据库中的有相同。这样带来的方便之处显而易见。 在开始之前,我们先创建一个名为MemberManaged的实体showImg(https://segmentfault.com/img/bVkmFI); MemberManaged.h...

    LeviDing 评论0 收藏0
  • 谈谈 DSL 以及 DSL 的应用(以 CocoaPods 为例)

    摘要:与相对,与传统意义上的通用编程语言以及完全不同。在上一节讲到的其实可以被称为外部而这里即将谈到的嵌入式也有一个别名,内部。 最近在公司做了一次有关 DSL 在 iOS 开发中的应用的分享,这篇文章会简单介绍这次分享的内容。 因为 DSL 以及 DSL 的界定本身就是一个比较模糊的概念,所以难免有与他人观点意见相左的地方,如果有不同的意见,我们可以具体讨论。 这次文章的题目虽然是谈谈...

    felix0913 评论0 收藏0
  • iOS 学习资料整理(下)

    摘要:看到一份很赞的学习资料,由于文章字数限制,分两篇分享原文学习资料整理简介主要对当前排名前的项目做一个简单的简介方便初学者快速了解到当前在的情况项目名称项目信息作者是的博主开发界的大神级人物毕业于卡内基梅隆大学开源了许多牛逼的项目这个便是其 看到一份很赞的IOS学习资料,由于SF文章字数限制,分两篇分享 原文 iOS 学习资料整理 GitHub Top 50 简介 主要对当前 Git...

    malakashi 评论0 收藏0
  • MJExtension源码学习(一)

    摘要:继续进行优秀开源框架的源码学习,这次打算学习一些常用的解析的框架,比如,,等。这句代码也就是递归思想的提现,如果这个成员变量是一个自定义类的,那么该成员变量对应的值应该也是一个,所以用这个二级的类继续调用方法,继续解析下去。 继续进行优秀开源框架的源码学习,这次打算学习一些常用的model解析的框架,比如YYModel,MJExtension,Mantle等。我自己用过YYModel和...

    Crazy_Coder 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<