美文网首页
iOS自动模型属性及字典转模型

iOS自动模型属性及字典转模型

作者: wsxiong | 来源:发表于2019-01-31 11:23 被阅读0次

1、一句代码自动生成模型属性

.h文件

#import <Foundation/Foundation.h>

@interface NSDictionary (Property)

- (void)createPropertyCode;

@end

.m文件

#import "NSDictionary+Property.h"

@implementation NSDictionary (Property)

- (void)createPropertyCode{

     [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {

    NSString *code = nil;

  if ([obj isKindOfClass:[NSString class]]) {

          code = [NSString stringWithFormat:@"@property (nonatomic, copy) NSString *%@;",key];

     }else if ([obj isKindOfClass:[NSNumber class]]){

            code = [NSString stringWithFormat:@"@property (nonatomic, assign) NSInteger %@;",key];

        }else if ([obj isKindOfClass: NSClassFromString(@"__NSCFBoolean")]){

            code = [NSString stringWithFormat:@"@property (nonatomic, assign) BOOL %@;",key];

        }else if ([obj isKindOfClass:[NSArray class]]) {

            code = [NSString stringWithFormat:@"@property (nonatomic, copy) NSArray *%@;",key];

        } else if ([obj isKindOfClass:[NSDictionary class]]) {

            code = [NSString stringWithFormat:@"@property (nonatomic, copy) NSDictionary *%@;",key];

        }

        [codes appendFormat:@"\n%@\n",code];

    }];

    NSLog(@"%@",codes);

}

@end


2、字典转模型

.h文件

#import <Foundation/Foundation.h>

@interface XSDictModel : NSObject

//字典转模型

+ (instancetype)modelWithDict:(NSDictionary *)dict;

@end

.m文件

#import "XSDictModel.h"

#import <objc/message.h>

@implementation XSDictModel

+ (instancetype)modelWithDict:(NSDictionary *)dict{

    id objc = [[self alloc] init];

    //1.获取成员变量

    unsigned int count = 0;

    //获取成员变量数组

    Ivar *ivarList = class_copyIvarList(self, &count);

    for (int i = 0; i < count; i++) {

        //获取成员变量

        Ivar ivar = ivarList[i];

        //获取成员变量名称

        NSString *ivarName = [NSString stringWithUTF8String:ivar_getName(ivar)];

        //获取成员变量类型

        NSString *ivarType = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];

       ivarType = [ivarType stringByReplacingOccurrencesOfString:@"\"" withString:@""];

        ivarType = [ivarType stringByReplacingOccurrencesOfString:@"@" withString:@""];

        //获取key

        NSString *key = [ivarName substringFromIndex:1];

        id value = dict[key];

        // 二级转换:判断下value是否是字典,如果是,字典转换层对应的模型

        // 并且是自定义对象才需要转换

        if ([value isKindOfClass:[NSDictionary class]] && ![ivarType hasPrefix:@"NS"]){

            //获取class

            Class modelClass = NSClassFromString(ivarType);

            value = [modelClass modelWithDict:value];

        }

        if (value) {

            [objc setValue:value forKey:key];

        }

    }

    return objc;

}

相关文章

  • iOS自动模型属性及字典转模型

    1、一句代码自动生成模型属性 .h文件#import @inte...

  • runtime字典转模型

    KVC实现字典转模型 模型类Status 其中,模型中的属性都是我通过上篇介绍的自动获取模型属性的方式来获得的外部...

  • KVC的简单使用

    KVC字典转模型 KVC 中经常使用的就是字典转模型 KVC的大招 KVC设置对象属性及取值 KVC间接设置对象属...

  • Runtime(五) 实战

    实战一: 数据转模型 目标: 数据转模型考验知识点: 获取属性列表, 关联属性, 字典转模型 1, 获取类的属性列...

  • 使用MJExtension时用到的核心代码

    最简单的字典转模型 JSON字符串转模型 模型中嵌套模型 A模型中有数组属性T,T里面是B模型 模型中的属性名和字...

  • OC_YYModel字典转模型的几种详细用法

    目录 JSON转字符串 普通字典转模型 模型属性有自定义的模型YYUSer 属性有数组(数组里自定义模型),还有字...

  • 14-Swift中字典转模型

    字典转模型(初始化时传入字典) 字典转模型(利用KVC转化) 一、 普通的字典转模型: 二、利用KVC字典转模型:

  • iOS 字典转模型KVC实现

    字典转模型 KVC 实现 KVC 字典转模型弊端:必须保证,模型中的属性和字典中的key一一对应。 如果不一致,就...

  • 字典转模型

    字典转模型 1.老方法:按照字典中的key创建模型的属性,然后为模型创建一个方法,接收字典参数,在方法里进行属性赋...

  • Runtime字典转模型

    用一个分类实现字典转模型,分类头文件如下: 如果模型的属性有字典数组,想要将该字典数组转换成模型数组,那么在该模型...

网友评论

      本文标题:iOS自动模型属性及字典转模型

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