iOS - 基于MJE的数据处理封装

Demo_gitHub

图片源于网络

基于MJE的数据处理封装

  • .h文件
#import <Foundation/Foundation.h>

typedef NS_ENUM(NSInteger,SkyDataType) {
    SkyDataTypeDictionary = 0,//最外层是字典
    SkyDataTypeArray, //最外层是数组
    SkyDataTypeNone //是字符串
};

@interface DataModelManager : NSObject

/**
 处理data数据
 @param responseObject 原始数据
 @param dataType 数据最外层类型
 @param modelName 模型名字
 @param modelKey 解析关键字
 @return 处理完的数据数组
 */
+(NSMutableArray *)dataDealWithResponseObject:(id)responseObject dataType:(SkyDataType)dataType modelName:(NSString *)modelName modelKey:(NSString *)modelKey;
@end

  • .m文件
#import "DataModelManager.h"
#import "MJExtension.h"

@interface DataModelManager()
+(instancetype)sharedAFManager;
@end
@implementation DataModelManager
static DataModelManager *aManager;
+ (DataModelManager *)sharedAFManager
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        aManager =  [[[super class] alloc]init];
    });
    return aManager;
}
+(NSMutableArray *)dataDealWithResponseObject:(id)responseObject dataType:(SkyDataType)dataType modelName:(NSString *)modelName modelKey:(NSString *)modelKey
{
    //处理二进制数据
    NSString *biteObject = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
    //过滤无用字符
    biteObject = [[self sharedAFManager] filtrationString:biteObject deleteStringArray:@[@"\r\n",@"\n",@"\t"]];
    //整理
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    if (!skyStringIsEmpty(biteObject)) {
        
        if (dataType == SkyDataTypeNone) {
            //是字符串
           dic[modelName] = @[biteObject];
        }
        
        if (dataType == SkyDataTypeDictionary) {
            NSData *data = [biteObject dataUsingEncoding:NSUTF8StringEncoding];
            //最外层是字典
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            [dic addEntriesFromDictionary:dict];
        }
        
        if (dataType == SkyDataTypeArray) {
            
            NSData *data = [biteObject dataUsingEncoding:NSUTF8StringEncoding];
            //最外层是数组
            NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            dic[modelName] = array;
        }
    }
    //解析
    NSMutableArray *modelArray = [NSMutableArray array];
    //是字符串
    if (dataType == SkyDataTypeNone) {
        [modelArray addObjectsFromArray:dic[modelName]];
    }
    //最外层是字典
    if (dataType == SkyDataTypeDictionary) {
        [modelArray addObjectsFromArray:[NSClassFromString(modelName) mj_objectArrayWithKeyValuesArray:dic[modelKey]]];
    }
    //最外层是数组
    if (dataType == SkyDataTypeArray) {
        [modelArray addObjectsFromArray:[NSClassFromString(modelName) mj_objectArrayWithKeyValuesArray:dic[modelName]]];
    }
    
    
    return modelArray;
}

#pragma mark --- 去除字符
-(NSString *)filtrationString:(NSString *)String deleteStringArray:(NSArray *)deleteStringArray
{
    if (String == NULL || [String isEqualToString:@""]) {
        return @"";
    }
    NSMutableString *str1 = [NSMutableString stringWithString:String];
    for (int i = 0; i<deleteStringArray.count; i++) {
        NSRange range = [str1 rangeOfString:deleteStringArray[i]];
        while (range.location != NSNotFound) {
            [str1 deleteCharactersInRange:range];
            range = [str1 rangeOfString:deleteStringArray[i]];
        }
    }
    return str1;
    
}
@end

主要步骤

  • 创建DataModelManager类,继承自NSObject类

  • 数据类型用枚举定义

typedef NS_ENUM(NSInteger,SkyDataType) {
    SkyDataTypeDictionary = 0,//最外层是字典
    SkyDataTypeArray, //最外层是数组
    SkyDataTypeNone //是字符串
};
  • 在.m文件中导入#import "MJExtension.h",并获取DataModelManager类単例
@interface DataModelManager()
+(instancetype)sharedAFManager;
@end
@implementation DataModelManager
static DataModelManager *aManager;
+ (DataModelManager *)sharedAFManager
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        aManager =  [[[super class] alloc]init];
    });
    return aManager;
}
@end
  • 将元数据转二进制数据并过滤无用字符
    //处理二进制数据
    NSString *biteObject = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
    //过滤无用字符
    biteObject = [[self sharedAFManager] filtrationString:biteObject deleteStringArray:@[@"\r\n",@"\n",@"\t"]];
  • 去除字符方法实现
#pragma mark --- 去除字符
-(NSString *)filtrationString:(NSString *)String deleteStringArray:(NSArray *)deleteStringArray
{
    if (String == NULL || [String isEqualToString:@""]) {
        return @"";
    }
    NSMutableString *str1 = [NSMutableString stringWithString:String];
    for (int i = 0; i<deleteStringArray.count; i++) {
        NSRange range = [str1 rangeOfString:deleteStringArray[i]];
        while (range.location != NSNotFound) {
            [str1 deleteCharactersInRange:range];
            range = [str1 rangeOfString:deleteStringArray[i]];
        }
    }
    return str1;
    
}
  • 整理过滤完的数据
    //整理
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    if (!skyStringIsEmpty(biteObject)) {
        
        if (dataType == SkyDataTypeNone) {
            //是字符串
           dic[modelName] = @[biteObject];
        }
        
        if (dataType == SkyDataTypeDictionary) {
            NSData *data = [biteObject dataUsingEncoding:NSUTF8StringEncoding];
            //最外层是字典
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            [dic addEntriesFromDictionary:dict];
        }
        
        if (dataType == SkyDataTypeArray) {
            
            NSData *data = [biteObject dataUsingEncoding:NSUTF8StringEncoding];
            //最外层是数组
            NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            dic[modelName] = array;
        }
    }
  • 使用mj_objectArrayWithKeyValuesArray解析
    //解析
    NSMutableArray *modelArray = [NSMutableArray array];
    //是字符串
    if (dataType == SkyDataTypeNone) {
        [modelArray addObjectsFromArray:dic[modelName]];
    }
    //最外层是字典
    if (dataType == SkyDataTypeDictionary) {
        [modelArray addObjectsFromArray:[NSClassFromString(modelName) mj_objectArrayWithKeyValuesArray:dic[modelKey]]];
    }
    //最外层是数组
    if (dataType == SkyDataTypeArray) {
        [modelArray addObjectsFromArray:[NSClassFromString(modelName) mj_objectArrayWithKeyValuesArray:dic[modelName]]];
    }
  • 以上

Demo_gitHub

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容

  • 南岳衡山之美,一如深浅墨间山水画,诗意悠悠归心间,静谧的笔端悄然滑落一点墨,从山水间拾取一瓣瓣清秀的美,蕴含着空灵...
    言西早青争阅读 2,205评论 0 5
  • 现在我任初三12班语文,是蜗牛班的蜗牛班。在前六个班热火朝天地备战中考的时候,我们也过得热火朝天,我们在热火朝天地...
    灵芝姐姐阅读 257评论 2 5
  • 其实一直也在想 自己的故事 可能写起来 会是一篇长篇小说 对于别人 可能枯燥乏味 对于我 却是用尽了自己的力气呢...
    阿乖诶阅读 212评论 0 0
  • 最近有人问了小编一个问题,你知道220V与380V哪个好吗? 这个问题其实并不好直接回答,只能说用的地方不同,电压...
    电力实事阅读 15,725评论 0 0