iOS runtime进行数据解析封装
来源:互联网 发布:足球大数据分析软件 编辑:程序博客网 时间:2024/05/22 17:21
废话不说直接上代码…代码才是最给力的
#import <Foundation/Foundation.h>@interface BPQNetworkingResult : NSObject@property (nonatomic,strong)id Data;@property (nonatomic,strong)NSNumber *Code;@property (nonatomic,strong)NSString *Reason;/*! 首级数据赋值 */+(instancetype)modelWithResponse:(NSDictionary *)response;/*! 多层级model赋值 */+(instancetype)modelWithResult:(id)result;/*! 结果返回正常 */BOOL succeed(XDNetworkingResult *result);@end
#import "BPQNetworkingResult.h"#import <objc/runtime.h>@implementation XDNetworkingResultNSString *runtime_value(id object){ if (isNull(object)) { return @""; } return toString(object);}+(instancetype)modelWithResponse:(NSDictionary *)dictionary{ unsigned int count = 0; id model = [self new];//Code/Data/Reason objc_property_t *property = class_copyPropertyList([model class], &count); for (int i = 0; i < count; i++) { NSString *key = [NSString stringWithUTF8String:property_getName(property[i])]; NSObject *obj = dictionary[key]; if ([obj isKindOfClass:[NSString class]]) { [model setValue:obj forKey:key];//Data/Reason }else if([obj isKindOfClass:[NSNumber class]]){ [model setValue:@([dictionary[key] boolValue]) forKey:key];//Code }else if ([obj isKindOfClass:[NSDictionary class]]){ [model setValue:obj forKey:key];//以字典形式存入model,在需要的地方用model归档 }else if ([obj isKindOfClass:[NSArray class]]){ [model setValue:obj forKey:key];//以数组形式存入model,在需要的地方用model归档 } } return model;}+(id)modelWithResult:(id)result{ if ([result isKindOfClass:[NSArray class]]) { return [self modelWithArray:result]; }else if ([result isKindOfClass:[NSDictionary class]]) { return [self modelWithDictionary:result]; } return nil;}+(id)modelWithArray:(NSArray *)array{ NSMutableArray *mu = [NSMutableArray new]; for (int i = 0; i < array.count; i++) { NSDictionary *dic = array[i]; [mu addObject:[self modelWithDictionary:dic]]; } return mu;}+(id)modelWithDictionary:(NSDictionary *)dictionary{ id model = [self new]; unsigned int count = 0; objc_property_t *property = class_copyPropertyList([model class], &count); for (int i = 0; i < count; i++) { NSString *key = [NSString stringWithUTF8String:property_getName(property[i])]; NSObject *obj = dictionary[key]; if ([obj isKindOfClass:[NSString class]]) { [model setValue:obj forKey:key]; }else if([obj isKindOfClass:[NSNumber class]]){ [model setValue:@([dictionary[key] boolValue]) forKey:key]; }else if ([obj isKindOfClass:[NSDictionary class]]){ NSLog(@"%@",obj); }else if ([obj isKindOfClass:[NSArray class]]){ NSArray *arr = (NSArray *)obj; [model setValue:[self modelWithArray:arr key:key] forKey:key]; } } return model;}+(NSArray *)modelWithArray:(NSArray *)array key:(NSString *)key{ NSMutableArray *mu = [NSMutableArray new]; for (int i = 0; i < array.count; i++) { NSDictionary *dic = array[i]; id model = [NSClassFromString(key) new]; unsigned int count = 0; objc_property_t *property = class_copyPropertyList([model class], &count); for (int a = 0; a < count; a++) { NSString *child_key = [NSString stringWithUTF8String:property_getName(property[a])]; NSObject *obj = dic[child_key]; if ([obj isKindOfClass:[NSString class]]) { [model setValue:obj forKey:child_key]; }else if ([obj isKindOfClass:[NSNumber class]]){ [model setValue:@([dic[child_key] boolValue]) forKey:child_key]; }else if ([obj isKindOfClass:[NSArray class]]){//三级 NSArray *arr = (NSArray *)obj; [model setValue:[self modelWithArray:arr key:child_key] forKey:child_key]; }else if ([obj isKindOfClass:[NSDictionary class]]){ NSLog(@"%@",obj); } } [mu addObject:model]; } return mu;}BOOL succeed(BPQNetworkingResult *result){ if ([result.Code isEqual: @(0)]) { return YES; } return NO;}@end
阅读全文
0 0
- iOS runtime进行数据解析封装
- iOS JSON数据封装与解析
- ios runtime 详细解析
- runtime解析json数据
- iOS利用AFNetworking进行JSON数据解析
- iOS利用AFNetworking进行JSON数据解析
- iOS利用AFNetworking进行JSON数据解析
- iOS对FMDB进行封装实现缓存数据
- iOS中runtime运行机制解析
- iOS中runtime运行机制解析
- iOS runtime解析(1)
- iOS中runtime运行机制解析
- iOS网络开发——解析与封装JSON数据
- iOS简单runtime封装fmdb的使用
- iOS AFN 封装数据
- ios自带的json对请求数据进行解析
- iOS对sqlite3进行封装
- 利用Runtime的Associated进行封装和回调
- Maximum Length of Repeated Subarray问题及解法
- 【POJ】2393-Yogurt factory 贪心
- canopen PDO传输疑问
- opencv 从摄像头抓取图片
- How to: Configure an App to Support .NET Framework 4 or 4.5
- iOS runtime进行数据解析封装
- 转载--什么是P问题、np问题和npc问题
- Redis 连接
- Ubuntu如何往系统盘(文件系统)中复制文件
- 深入理解Java并发机制(2)--volatile关键字
- 论文查找
- zookeeper入门综合概要介绍
- IT小白如何从职场新人到行业翘楚,看一个IT高管的发展路线
- Vim编辑器