这里我就不多解释了
项目里的东西全放进来了
东西较多
请看完后自行更改
.h文件
#import <Foundation/Foundation.h>
@interface CreateFile : NSObject
/** .h文件的源代码 */
extern NSString * fieldH;
/** .m文件的源代码 */
extern NSString * fieldM;
/**
数据解析
arr:字典(map)
key:键值
*/
extern void nodeDic(NSDictionary * dic,NSString * keys);
/**
数据解析
arr:数组(array)
key:键值
*/
extern void nodeArr(NSArray * arr,NSString * key);
/**
创建文件( .h && .m )
file:文件名称
data:数据
*/
extern void CreateWithFileName(NSString * file ,id data);
@end
.m文件
#import "CreateFile.h"
@implementation CreateFile
NSString * fieldH = @"";
NSString * fieldM = @"";
extern void CreateWithFileName(NSString * file ,id data){
NSRange range = [file rangeOfString:@"[0-9]+" options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
file = [file stringByReplacingCharactersInRange:range withString:@"number"];
}
file = [[file stringByReplacingOccurrencesOfString:@"/" withString:@"_"] stringByAppendingString:@"_model"];
file = [file stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[file substringToIndex:1] capitalizedString]];
fieldH = String(@"#import \"ParentModel.h\"\n@interface %@ : ParentModel\n",file);
fieldM = String(@"#import \"%@.h\"\n@implementation %@\n- (void)initDictionary:(NSDictionary *)dictionary{\n",file,file);
if ([data isKindOfClass:[NSDictionary class]]) {
nodeDic((NSDictionary*)data,@"");
}else{
if ([data count] == 0) {
return;
}
nodeDic((NSDictionary*)data[0], @"");
}
fieldH = [fieldH stringByAppendingString:@"@end"];
fieldM = [fieldM stringByAppendingString:@"}\n@end"];
BOOL isDir = NO;
//String(@"/Users/mac/Desktop/DaYouQianTu/MoneyIsGreat/CreateModel/%@",file)
NSString * path = String(@"%@/Documents/%@",NSHomeDirectory(),file);
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isPath = [fileManager fileExistsAtPath:path isDirectory:&isDir];
if (!(isDir&&isPath)) {
BOOL isFile = [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
if (isFile) {
writeToModel(file);
}
}
/** 写入.h文件 String(@"/Users/mac/Desktop/DaYouQianTu/MoneyIsGreat/CreateModel/%@/%@.h",file,file) */
[fieldH writeToFile:String(@"%@/Documents/%@/%@.h",NSHomeDirectory(),file,file)
atomically:YES
encoding:NSUTF8StringEncoding
error:nil];
/** 写入.m文件 String(@"/Users/mac/Desktop/DaYouQianTu/MoneyIsGreat/CreateModel/%@/%@.m",file,file) */
[fieldM writeToFile:String(@"%@/Documents/%@/%@.m",NSHomeDirectory(),file,file)
atomically:YES
encoding:NSUTF8StringEncoding
error:nil];
}
extern void nodeDic(NSDictionary * dic,NSString * keys){
if (![keys isEqualToString:@""]) {
keys = [keys stringByAppendingString:@"_"];
}
for (NSString * key in dic.allKeys) {
NSString * keyStr;
NSString * fieldh;
NSString * fieldm;
if ([key isEqualToString:@"id"]) {
keyStr = @"Id";
}else{
keyStr = key;
}
if ([[dic objectForKey:String(@"%@",key)] isKindOfClass:[NSString class]]) {
fieldh = String(@"@property (nonatomic, copy) NSString * %@%@;\n",keys,keyStr);
fieldm = String(@"\t_%@%@ = [self getDictionaryStr:dictionary volue:@\"%@%@\"];\n",keys,keyStr,keys,keyStr);
}else if ([[dic objectForKey:String(@"%@",key)] isKindOfClass:[NSNumber class]]){
fieldh = String(@"@property (nonatomic, copy) NSNumber * %@%@;\n",keys,keyStr);
fieldm = String(@"\t_%@%@ = [self getDictionaryNum:dictionary volue:@\"%@%@\"];\n",keys,keyStr,keys,keyStr);
}else if ([[dic objectForKey:String(@"%@",key)] isKindOfClass:[NSDictionary class]]){
nodeDic([dic objectForKey:String(@"%@",key)],String(@"%@%@",keys,keyStr));
fieldh = String(@"@property (nonatomic, copy) NSDictionary * %@%@;\n",keys,keyStr);
fieldm = String(@"\t_%@%@ = [self getDictionaryDic:dictionary volue:@\"%@%@\"];\n",keys,keyStr,keys,keyStr);
}else if ([[dic objectForKey:String(@"%@",key)] isKindOfClass:[NSArray class]]){
nodeArr([dic objectForKey:String(@"%@",key)], String(@"%@%@",keys,keyStr));
fieldh = String(@"@property (nonatomic, copy) NSArray * %@%@;\n",keys,keyStr);
fieldm = String(@"\t_%@%@ = [self getDictionaryArr:dictionary volue:@\"%@%@\"];\n",keys,keyStr,keys,keyStr);
}else if ([[dic objectForKey:String(@"%@",key)] isKindOfClass:[NSNull class]]){
fieldh = String(@"@property (nonatomic, copy) NSArray * %@%@;\n",keys,keyStr);
fieldm = String(@"\t_%@%@ = [self getDictionaryArr:dictionary volue:@\"%@%@\"];\n",keys,keyStr,keys,keyStr);
}else{
NSLog(@"--------%@",[[dic objectForKey:String(@"%@",keyStr)] class]);
return;
}
fieldH = [fieldH stringByAppendingString:fieldh];
fieldM = [fieldM stringByAppendingString:fieldm];
}
}
extern void nodeArr(NSArray * arr,NSString * key){
for (int i = 0; i < arr.count ; i++) {
NSString * fieldh;
NSString * fieldm;
if ([arr[i] isKindOfClass:[NSString class]]) {
fieldh = String(@"@property (nonatomic, copy) NSString * %@_%ld;\n",key,i);
fieldm = String(@"\t_%@_%ld = [self getDictionaryStr:dictionary volue:@\"%@_%ld\"];\n",key,i,key,i);
}else if ([arr[i] isKindOfClass:[NSNumber class]]){
fieldh = String(@"@property (nonatomic, copy) NSNumber * %@_%ld;\n",key,i);
fieldm = String(@"\t_%@_%ld = [self getDictionaryNum:dictionary volue:@\"%@_%ld\"];\n",key,i,key,i);
}else if ([arr[i] isKindOfClass:[NSDictionary class]]){
nodeDic(arr[i],String(@"%@_%ld",key,i));
fieldh = String(@"@property (nonatomic, copy) NSDictionary * %@_%ld;\n",key,i);
fieldm = String(@"\t_%@_%ld = [self getDictionaryDic:dictionary volue:@\"%@_%ld\"];\n",key,i,key,i);
}else if ([arr[i] isKindOfClass:[NSArray class]]){
fieldh = String(@"@property (nonatomic, copy) NSString * %@_%ld;\n",key,i);
fieldm = String(@"\t_%@_%ld = [self getDictionaryStr:dictionary volue:@\"%@_%ld\"];\n",key,i,key,i);
}else{
NSLog(@"--------%@",[arr[i] class]);
}
fieldH = [fieldH stringByAppendingString:fieldh];
fieldM = [fieldM stringByAppendingString:fieldm];
}
}
/**
导入model的头文件
file:文件名
*/
extern void writeToModel(NSString * file){
NSString * modelPath = @"/Users/mac/Desktop/DaYouQianTu/MoneyIsGreat/CreateModel/Model.h";
NSData *reader = [NSData dataWithContentsOfFile:modelPath];
NSString * modelStr = [[NSString alloc]initWithData:reader encoding:NSUTF8StringEncoding];
NSArray * arr = [modelStr componentsSeparatedByString:@"\n"];
modelStr = @"";
for (int i = 0; i < arr.count ; i++) {
NSString * str = arr[i];
if (i == arr.count-3) {
modelStr = [modelStr stringByAppendingString:String(@"#import \"%@.h\"\n",file)];
}
if (i == arr.count-1) {
modelStr = [modelStr stringByAppendingString:String(@"%@",str)];
}else{
modelStr = [modelStr stringByAppendingString:String(@"%@\n",str)];
}
}
/** 写入model文件 */
[modelStr writeToFile:modelPath
atomically:YES
encoding:NSUTF8StringEncoding
error:nil];
}
@end
ParentModel.h
#import <Foundation/Foundation.h>
@interface ParentModel : NSObject
+(instancetype)feedWithDictionary:(NSDictionary *)dictionary;
-(void)initDictionary:(NSDictionary *)dictionary;
///取NSArray类型
-(NSArray *)getDictionaryArr:(NSDictionary *)dictionary volue:(NSString *)volue;
///取NSDictionary类型
-(NSDictionary *)getDictionaryDic:(NSDictionary *)dictionary volue:(NSString *)volue;
///取NSNumber类型
-(NSNumber *)getDictionaryNum:(NSDictionary *)dictionary volue:(NSString *)volue;
///取NSString类型
-(NSString *)getDictionaryStr:(NSDictionary *)dictionary volue:(NSString *)volue;
///取NSInteger类型
-(NSInteger)getDictionaryInt:(NSDictionary *)dictionary volue:(NSString *)volue;
///取CGFloat类型
-(CGFloat)getDictionaryFloat:(NSDictionary *)dictionary volue:(NSString *)volue;
///取BOOL类型
-(BOOL)getDictionaryBool:(NSDictionary *)dictionary volue:(NSString *)volue;
-(void)getFieldList;
@end
ParentModel.m
#import "ParentModel.h"
@implementation ParentModel
+(instancetype)feedWithDictionary:(NSDictionary *)dictionary{
return [[self alloc]initWithDictionary:dictionary];
}
-(instancetype)initWithDictionary:(NSDictionary *)dictionary{
self = [super init];
if (self) {
[self initDictionary:dictionary];
}
return self;
}
-(void)initDictionary:(NSDictionary *)dictionary{
}
///取NSArray类型
-(NSArray *)getDictionaryArr:(NSDictionary *)dictionary volue:(NSString *)volue{
if ([dictionary objectForKey:volue]) {
if ([dictionary objectForKey:volue] != nil && ![[dictionary objectForKey:volue] isKindOfClass:[NSNull class]]) {
return [dictionary objectForKey:volue];
}
}
return @[@""];
}
///取NSDictionary类型
-(NSDictionary *)getDictionaryDic:(NSDictionary *)dictionary volue:(NSString *)volue{
if ([dictionary objectForKey:volue]) {
if ([dictionary objectForKey:volue] != nil && ![[dictionary objectForKey:volue] isKindOfClass:[NSNull class]]) {
return [dictionary objectForKey:volue];
}
}
return @{@"null":@"nil"};
}
///取NSNumber类型
-(NSNumber *)getDictionaryNum:(NSDictionary *)dictionary volue:(NSString *)volue{
if ([dictionary objectForKey:volue]) {
if ([dictionary objectForKey:volue] != nil && ![[dictionary objectForKey:volue] isKindOfClass:[NSNull class]]) {
return [dictionary objectForKey:volue];
}
}
return [NSNumber numberWithInteger:0];
}
///取NSString类型
-(NSString *)getDictionaryStr:(NSDictionary *)dictionary volue:(NSString *)volue{
if ([dictionary objectForKey:volue]) {
if ([dictionary objectForKey:volue] != nil && ![[dictionary objectForKey:volue] isKindOfClass:[NSNull class]]) {
if ([[dictionary objectForKey:volue] isKindOfClass:[NSString class]]) {
return [dictionary objectForKey:volue];
}else{
return [[dictionary objectForKey:volue] stringValue];
}
}
}
return @"";
}
///取NSInteger类型
-(NSInteger)getDictionaryInt:(NSDictionary *)dictionary volue:(NSString *)volue{
if ([dictionary objectForKey:volue]) {
if ([dictionary objectForKey:volue] != nil && ![[dictionary objectForKey:volue] isKindOfClass:[NSNull class]]) {
return [[dictionary objectForKey:volue] integerValue];
}
}
return 0;
}
///取CGFloat类型
-(CGFloat)getDictionaryFloat:(NSDictionary *)dictionary volue:(NSString *)volue{
if ([dictionary objectForKey:volue]) {
if ([dictionary objectForKey:volue] != nil && ![[dictionary objectForKey:volue] isKindOfClass:[NSNull class]]) {
return [[dictionary objectForKey:volue] floatValue];
}
}
return 0;
}
///取BOOL类型
-(BOOL)getDictionaryBool:(NSDictionary *)dictionary volue:(NSString *)volue{
if ([dictionary objectForKey:volue]) {
if ([dictionary objectForKey:volue] != nil && ![[dictionary objectForKey:volue] isKindOfClass:[NSNull class]]) {
return [[dictionary objectForKey:volue] boolValue];
}
}
return NO;
}
-(void)getFieldList{
unsigned int count;
objc_property_t *propertyList = class_copyPropertyList([self class], &count);
for (unsigned int i = 0; i<count; i++) {
const char *propertyName = property_getName(propertyList[i]);
NSLog(@"PropertyName(%d): %@",i,[NSString stringWithUTF8String:propertyName]);
}
free(propertyList);
}
网友评论