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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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