美文网首页
利用 Runtime 实现字典转模型 上篇

利用 Runtime 实现字典转模型 上篇

作者: Young_Blood | 来源:发表于2016-05-17 09:42 被阅读34次

    实现一级字典转模型

    核心方法注解

    // ivar:成员属性
    // class_copyIvarList:把成员属性列表复制一份给你
    // Ivar *:指向Ivar指针
    // Ivar *:指向一个成员变量数组
    // class:获取哪个类的成员属性列表
    // count:成员属性总数
    
        // Ivar *ivarList = class_copyIvarList(<#__unsafe_unretained Class cls#>, <#unsigned int *outCount#>)
    
    

    具体实现

    + (instancetype)modelWithDictionary:(NSDictionary *)dictionary
    {
        // 创建 model
        id objc = [[self alloc] init];
        
        unsigned int count = 0;
        Ivar *ivarList = class_copyIvarList(self, &count);
        
        for (NSInteger i = 0; i < count; i++) {
            Ivar ivar = ivarList[i];
            
            // 获取成员名
            NSString *propertyName = [NSString stringWithUTF8String:ivar_getName(ivar)];
            
            // 成员属性类型
            NSString *propertyType = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];
            
            // 获取 key
            NSString *keyString = [propertyName substringFromIndex:1];
            
            id value = dictionary[keyString];
             if (value) {
                // KVC赋值:不能传空
                [objc setValue:value forKey:keyString];
                
            }
        }
        return objc;
    }
    

    相关文章

      网友评论

          本文标题:利用 Runtime 实现字典转模型 上篇

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