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

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

作者: Young_Blood | 来源:发表于2016-05-17 10:23 被阅读32次

    实现二级字典转模型

    + (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 isKindOfClass:[NSDictionary class]] && ![propertyType containsString:@"NS"]) {
                
                // 字符串截取   @"@\"User\""  ->  User\""
                NSRange range = [propertyType rangeOfString:@"\""];
                propertyType = [propertyType substringFromIndex:range.location + range.length];
                // User\"" -> User
                range = [propertyType rangeOfString:@"\""];
                propertyType = [propertyType substringToIndex:range.location];
                
                // 获取到转换的类
                Class modelClass = NSClassFromString(propertyType);
                
                if (modelClass) {
                    value = [modelClass modelWithDictionary:value];
                }
            }
            
            if (value) {
                [objc setValue:value forKey:keyString];
            }
            
        }
        
        return objc;
    }
    

    相关文章

      网友评论

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

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