美文网首页技术文iOSiOS技术专题
运行时使用之获取属性、字典转模型

运行时使用之获取属性、字典转模型

作者: 马铃薯蜀黍 | 来源:发表于2016-08-24 17:55 被阅读46次
    Apple.jpg
    • 需求驱动开发
    • 模型中实现字典转模型 --> 获取模型的属性 (运行时方法)

    1.获取属性列表
    2.取出objc_property_t数组中的property
    3.获取的是C语言的名称
    4.将C语言的字符串转成OC的
    5.添加到属性数组中

    • 注意点:
      1.使用类方法
      2.C语言中,用完copy,create的东西之后,最好释放
    + (NSArray *)properties{
        unsigned int count;
        /*
            1.获取属性列表
            参数1:获取哪个类的
            参数2:count表示你该类里面有多少个属性
         
            propertyList 它就相当于一个数组
         
            数组里面就装着 .h 文件中的 @property (nonatomic, copy) NSString *title;,@property (nonatomic, copy) NSString *digest;...
         */
        objc_property_t *propertyList = class_copyPropertyList([self class], &count);
        
        //定义OC的属性数组
        NSMutableArray *ocProperties = [NSMutableArray array];
        for (int i=0; i<count; i++) {
            //2.取出objc_property_t数组中的property
            objc_property_t property = propertyList[i];
            
            //3.获取的是C语言的名称
            const char *cPropertyName = property_getName(property);
            
            //4.将C语言的字符串转成OC的
            NSString *ocPropertyName = [[NSString alloc] initWithCString:cPropertyName encoding:NSUTF8StringEncoding];
            
            //5.添加到属性数组中
            [ocProperties addObject:ocPropertyName];
        }
        
        //5.C语言中,用完copy,create的东西之后,最好释放
        free(propertyList);
        
        return ocProperties.copy;
    }
    
    
    • 转模型的方法
    + (instancetype)newsWithDict:(NSDictionary *)dict{
        id obj = [[self alloc] init];
        
        NSArray *properties = [self properties];
        for (NSString *property in properties) {
            if (dict[property]!=nil) {
                //KVC赋值
                [obj setValue:dict[property] forKey:property];
            }
        }
        
        return obj;
    }
    
    • 小结:
      有了这两个方法就可以轻松的把后台返回的接口数据转化了,相比用第三方,自己来写也并不费力~~第三方优点是对层次结构比较深的转字典转模型也好用.

    相关文章

      网友评论

        本文标题:运行时使用之获取属性、字典转模型

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