Mantle库替换为MJExtension

    项目历史原因,混合使用了MJExtension与Mantle框架。但是在遇到保留字段时遇到了问题,猜测原因可能库冲突,所以将Mantle库替换为MJExtension。总体还是很简单的,重点记录一下MJExtension的使用。

    Mantle与MJExtension皆是一种字典模型转换框架,简单使用过后感觉MJExtension更好用。

    Mantle: 需要继承MTLModel 遵循协议MTLJSONSerializing

    实现+ (NSDictionary *)JSONKeyPathsByPropertyKey ;

    在属性中有日期类型是需要转换

    + (NSDateFormatter*)dateFormatter {

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZZZZ";

    return dateFormatter;

    }

    + (NSValueTransformer *)dateJSONTransformer {

        return [MTLValueTransformer transformerUsingForwardBlock:^(NSString *string, BOOL *success,     NSError *__autoreleasing *error) {

        return [[super dateFormatter] dateFromString:string];

    } reverseBlock:^(NSDate *date, BOOL *success, NSError *__autoreleasing *error) {

        return [[super dateFormatter] stringFromDate:date];

    }];

}

常用方法:

    NSArray *events = [MTLJSONAdapter modelsOfClass:[SHQEvent class]             fromJSONArray:responseObject error:nil];

    SHQEvent *event = [MTLJSONAdapter modelOfClass:[SHQEvent class] fromJSONDictionary:[responseObject objectForKey:@"result"] error:nil];



    MJExtension:可以看到基本是写在分类中的,不需要继承,直接导入实现相应方法即可。

        github地址:https://github.com/CoderMJLee/MJExtension

MJExtension

无论是字典转模型还是jsonString转模型,包括模型中嵌套了模型,只要想转换为模型,调用方法

Model *model = [Model mj_objectWithKeyValues:param];

模型中有数组 ,数组中又有其他模型

[Model mj_setupObjectClassInArray:^NSDictory * {

    return @{ @“events”:@“Event”} // 模型数组转换

[Model mj_objectWithKeyValues:dic];

模型中属姓名和字典中的key不一样(最常用)

Model mj_setupReplacedKeyFromPropertyName:^NSDictory  {

return @{@“userName”:@“username”};

}

Model *model = [Model mj_objectWithKeyValues:dic];

模型转换为字典:

NSDictionary *dic = Model.mj_keyValues;

字典数组转换为模型数组

NSArray *models = [Model mj_objectArrayWithKeyValuesArray:dic];

模型数组转换为字典数组:

NSArray *dicArray = [Model mj_keyValuesArrayWithObjectArray:arr];

不转换某个属性

// what properties not to be coded

[Model mj_setupIgnoredCodingPropertyNames:^NSArray *{

    return @[@""];

}];

统一转换属姓名 (如驼峰命名法)

+(NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName

{

    // nickName -> nick_name

    return[propertyName mj_underlineFromCamel];

}

[Model mj_objectWithKeyValues:dic];

过滤字典中的值

-(id)mj_newValueFromOldValue:(id)oldValue property(MJProperty *)property {

if(property.type.typeClass ==[NSDate class]){

//oldValue转换成NSDate返回

}

}

还要注意点是在Mantle中遵循MTLJSONSerializing协议就遵循了NSCoding,而在MJExtension中需要手动。同时MJExtension提供了相关宏MJCodingImplementation 在基类中使用即可。


关于MJExtension的使用在github中有详细描述,本文仅作简单记录。周末进行框架的进一步学习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容