Mantle For iOS
生活随笔
收集整理的這篇文章主要介紹了
Mantle For iOS
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Mantle可以很方便的去書寫一個模型層的代碼。
使用它可以很方便的去反序列化JSON或者序列化為JSON(需要在MTLModel子類中實現<MTLJSONSerializing>協議)
使用一個解釋器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已經遵循了<NSCoding>協議,所以可以NSKeyedArchiver歸檔這個模型對象。
本文轉載自:http://www.thinksaas.cn/group/topic/347073/總結
以上是生活随笔為你收集整理的Mantle For iOS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 集群分区_mysql 集群与
- 下一篇: PBOC3.0中使用的国密SM2算法