zoukankan      html  css  js  c++  java
  • IOS 字典快速转换为Model 模型

    一般情况下IOS得局部页面加载的过程是,创建一个Model然后,将Nib文件与Model进行关联,然后能够快速的获取到Nib文件上的控件实例。操作生成页面。

    但是原生的内容是没有直接通过Json获取Model只能生成字典。然后转换为Model。下列方法就是通过字典来转换为Model的过程。

    首先是要添加对应的使用的头文件#import <objc/runtime.h>

    然后添加下面几个方法

    Model从字典中填充数据

    /*
     *  从字典中填充数据
     */
    -(int)reflectDataFromDictionary:(NSDictionary *)dic
    {
        unsigned int useCount ,outCount;
        Ivar *ivars = class_copyIvarList([self class], &outCount);
        
        for (const Ivar *p = ivars; p < ivars + outCount; p++) {
            Ivar const ivar = *p;
            
            //获取变量名
            NSString *varName = [NSString stringWithUTF8String:ivar_getName(ivar)];
            
            //获取变量值
            id varValue = [self valueForKey:varName];
            
            //如果是直接包含此名称的
            if ([dic.allKeys containsObject:varName]) {
                varValue = [dic objectForKey:varName];
                useCount++;
            }else{
                NSString *tmp_varName = [self removeFirstUnderlined:varName];
                if ([dic.allKeys containsObject:tmp_varName]) {
                    varValue = [dic objectForKey:tmp_varName];
                    useCount++;
                }
            }
            
            [self setValue:varValue forKey:varName];
        }
        
        return useCount;
    }

    两个辅助方法

    /*
     *  移除掉第一个下划线
     */
    -(NSString *)removeFirstUnderlined:(NSString *)str
    {
        if ([[str substringToIndex:1] isEqual:@"_"]) {
            return [str substringFromIndex:1];
        }
        return str;
    }
    
    /*
     *  获取所有属性
     */
    - (NSArray*)propertyKeys
    {
        unsigned int outCount, i;
        objc_property_t *properties = class_copyPropertyList([self class], &outCount);
        NSMutableArray *keys = [[NSMutableArray alloc] initWithCapacity:outCount];
        for (i = 0; i < outCount; i++) {
            objc_property_t property = properties[i];
            NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
            [keys addObject:propertyName];
        }
        free(properties);
        return keys;
    }

    将Model转换为字典

    /*
     *  转换为字典
     */
    -(NSDictionary *)convertToDictionary
    {
        NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
        
        for (NSString *key in [self propertyKeys]) {
            id propertyValue = [self valueForKey:key];
            [dic setObject:propertyValue forKey:key];
        }
        
        return dic;
    } 

    抽空写了一个Demo出来,GitHub死活上传不上去,所以放到CSDN上去了。如果需要的话可以Down下来看看http://download.csdn.net/detail/anxin1225/8190975

    然后,就没有然后了……

  • 相关阅读:
    centos部署bladex boot 之docker安装
    git ssh key创建和github使用
    Debian root登录设置
    Linux软件源
    Secure backup
    Python简易web服务
    好久没有更新博客了
    Python实现无向图最短路径
    DWZ使用中遇到的坑
    tronado学习
  • 原文地址:https://www.cnblogs.com/anxin1225/p/3926542.html
Copyright © 2011-2022 走看看