NSDictionary에 NSDictionary 단순화 포함 여부 판단

9853 단어 IOSios

사고방식: 사전이 끼워 넣은 사전의 상황을 고려해야 한다. 간단한 귀속 검색이 가능하다. 다른 더 간단한 방법이 있다면 메모 토론을 환영한다~

#pragma mark - 

///  
/// @param data  object
+ (NSDictionary *)handleWithData:(NSDictionary *)data {
    if (![data isKindOfClass:[NSDictionary class]]) {
        return nil;
    }
    NSMutableDictionary *newData = [NSMutableDictionary dictionaryWithDictionary:data];
    __block BOOL hasConverData = NO;
    for (NSDictionary *obj in [XQMTestConfigManager shareManager].config.paramsConvertor) {
        id condition = [obj objectForKey:@"condition"];
        NSDictionary *conditionDict = ([condition isKindOfClass:[NSDictionary class]]) ? condition : nil;
        BOOL match = [self containsData:data byCondition:conditionDict];
        if (match) {
            ...
        }
    }
    return hasConverData ? [newData copy] : data;
}


///  
/// @param data  
/// @param condition  
+ (BOOL)containsData:(NSDictionary *)data byCondition:(NSDictionary *)condition {
    __block BOOL match = NO;
    if (!(data && [data isKindOfClass:[NSDictionary class]] && data.count > 0)) {
        return match;
    }
    if (!(condition && [condition isKindOfClass:[NSDictionary class]] && condition.count > 0)) {
        return match;
    }
    
   [condition enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
       id dValue = [data objectForKey:key];
       if (dValue == nil) {
           match = NO;
       } else if ([obj isKindOfClass:[NSDictionary class]] && [dValue isKindOfClass:[NSDictionary class]]) {
           match = [self containsData:dValue byCondition:obj];
       } else {
           match = [dValue isEqual:obj];
       }
       if (!match) {
           *stop = YES;
       }
    }];
    return match;
}

좋은 웹페이지 즐겨찾기