美文网首页iOS - 开发技巧
iOS - 基于MJE的数据处理封装

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

作者: SkyMing一C | 来源:发表于2018-01-11 17:24 被阅读8次

    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

    相关文章

      网友评论

        本文标题:iOS - 基于MJE的数据处理封装

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