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

实现一级字典转模型

核心方法注解

// 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 实现字典转模型 上篇)