美文网首页
MJExtension 使用

MJExtension 使用

作者: 黑羽肃霜 | 来源:发表于2016-08-01 16:23 被阅读286次

    使用必备

    • cocoapods下载 MJExtension
    • 抓到的JSON包
    • 插件 ESJsonFormat

    实例

    • 创建一个model类,testModel
    • 将抓到的JSON数据直接贴到插件ESJsonFormat中去,生成对应的类
      • 输入


        调用插件
      • testModel中行程多态,不用另外再去创建多个Model
    • 将property中和关键字重复的属性改名。如json中的id,在property中要改为ID
    • 通常我们做的转化,都是一个类中包含数组,数组又是另一个model组成的,例如:


      说明

    Model实例代码:.h

    #import <Foundation/Foundation.h>
    typedef enum {
        SexMale,
        SexFemale
    } Sex;
    @class MJUser;
    
    @interface TestModel : NSObject
    @property (strong, nonatomic) NSMutableArray *statuses;/** 存放着某一页微博数据(里面都是Status模型) */
    @property (strong, nonatomic) NSArray *ads;/** 存放着一堆的广告数据(里面都是MJAd模型) */
    @property (strong, nonatomic) NSNumber *totalNumber;/** 总数 */
    @property (assign, nonatomic) long long previousCursor;/** 上一页的游标 */
    @property (assign, nonatomic) long long nextCursor;/** 下一页的游标 */
    @end
    
    @interface MJStatus : NSObject
    @property (copy, nonatomic) NSString *text;/** 微博文本内容 */
    @property (strong, nonatomic) MJUser *user;/** 微博作者 */
    @end
    
    @interface MJUser : NSObject
    @property (copy, nonatomic) NSString *name;/** 名称 */
    @property (copy, nonatomic) NSString *ID;/** 头像 */
    @property (assign, nonatomic) unsigned int age;/** 年龄 */
    @property (strong, nonatomic) NSNumber *height;/** 身高 */
    @property (strong, nonatomic) NSDecimalNumber *money;/** 财富 */
    @property (assign, nonatomic) Sex sex;/** 性别 */
    @property (assign, nonatomic, getter=isGay) BOOL gay;/** 同性恋 */
    @end
    
    @interface MJAd : NSObject
    @property (copy, nonatomic) NSString *image;/** 广告图片 */
    @property (strong, nonatomic) NSURL *url;/** 广告url */
    @end
    

    Model.m

    #import "TestModel.h"
    #import "MJExtension.h"
    
    @implementation TestModel
    
    //+ (NSDictionary *)mj_objectClassInArray
    //{
    //    return @{
    //             @"statuses" : @"MJStatus",
    //             @"ads" : @"MJAd"
    //             };
    //}
    
    
    + (NSDictionary *)objectClassInArray{
        return @{@"statuses" : [MJStatus class],
                 @"ads" : [MJAd class]};
    }
    
    + (NSDictionary *)mj_replacedKeyFromPropertyName {
        return @{@"ID" : @"id"
                 };
    }
    @end
    
    @implementation MJStatus
    @end
    
    @implementation MJUser
    @end
    
    @implementation MJAd
    @end
    

    MJExtension 几种方法使用说明

    • --- 传入JSON 字符串或字典,直接取出数据 ---
      dict是一串JSON转好的字典
    TestModel *model = [TestModel mj_objectWithKeyValues:dict];
    
    • --- 当JSON的dict字段为关键字(如id)时的映射改变处理 ---
      在TestModel.m中增加映射关系
    +(NSDictionary *)mj_replacedKeyFromPropertyName{
        return @{@"ID" : @"id",
                 @"desc" : @"desciption",
                 };
    }
    
    • --- property为NSArray时必须添加数组的映射 ---
    //======================= .h中的声明 =======================
    @interface TestModel : NSObject
    @property (strong, nonatomic) NSMutableArray *statuses;/** 存放着某一页微博数据(里面都是Status模型) */
    ...
    @end
    //======================= .m中的声明 =======================
    +(NSDictionary *)objectClassInArray{ //这种方式用插件已经可以直接生成
        return @{@"statuses" : [MJStatus class],
                 @"ads" : [MJAd class]};
    }
    // 或者写成
    +(NSDictionary *)mj_objectClassInArray {
        return @{
                 @"statuses" : @"MJStatus",
                 };
    }
    
    • --- 过滤字典的值(比如字符串日期处理为NSDate、字符串nil处理为@"" ---
      例如一个类MJBook为
    @interface MJBook : NSObject
    @property (copy, nonatomic) NSString *name;
    @property (copy, nonatomic) NSString *publisher;
    @property (strong, nonatomic) NSDate *publishedTime;
    @property (strong, nonatomic) MJBox *box;
    @end
    

    JSON内容为:

        NSDictionary *dict = @{
                               @"name" : @"5分钟突破iOS开发",
                               @"publishedTime" : @"2011-09-10"
                               };
    
    • publisher一定为空,且publishedTime的类型和JSON传过来的不符
    • 在TestModel.m中增加映射关系
    -(id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property {
        if ([property.name isEqualToString:@"publisher"]) { // 过滤掉空的属性值
            if (oldValue == nil) return @"";
        } else if (property.type.typeClass == [NSDate class]) {
            NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
            fmt.dateFormat = @"yyyy-MM-dd";
            return [fmt dateFromString:oldValue];
        }
        return oldValue;
    }
    

    相关文章

      网友评论

          本文标题:MJExtension 使用

          本文链接:https://www.haomeiwen.com/subject/yraxsttx.html