iOS 判断某个值是否属于控制器的变量

在APP有动态配置的情况下,经常需要判断你所传的值是否跟你想跳转的控制器内的参数相同,需要在跳转前进行一些判断来防止控制器崩溃

判断控制器中是否拥有该字符串值的变量

/**
 判断控制器中是否拥有该字符串值的变量

 @param obj 控制器
 @param keystring 字符串值
 @return 是否拥有
 */
+ (BOOL)isPropertyFromObj:(id)obj WithKeyString:(NSString *)keystring {
    u_int count = 0;
    //存储成员变量名称的数组
    NSMutableArray *propertyArray = [NSMutableArray array];
    //获取控制器的成员变量数组
    objc_property_t *properties = class_copyPropertyList([obj class], &count);
    __block BOOL isProperty;
    for (int i = 0; i < count; i++) {
        // 取出成员变量
        objc_property_t property = properties[i];
        
        // 成员变量名字
        NSString *keyValue = [NSString stringWithFormat:@"%s",property_getName(property)];
        [propertyArray addObject:keyValue];
        
    }
     //判断成员变量名字数组中是否包含该参数
        if ([propertyArray containsObject:keystring]) {
            ///有这个参
            isProperty = YES;
        }else {
            ///没有这个参
            isProperty = NO;
        }
    return isProperty;
}

判断控制器是否拥有字典所传的值

/**
 判断控制器是否拥有字典所传的值

 @param obj 控制器
 @param dict 所传入的字典参数
 @return 是否拥有
 */
+ (BOOL)isPropertyFromObj:(id)obj WithObjDict:(NSDictionary *)dict {
    u_int count = 0;
    //存储成员变量名称的数组
    NSMutableArray *propertyArray = [NSMutableArray array];
    //获取控制器的成员变量数组
    objc_property_t *properties = class_copyPropertyList([obj class], &count);
    __block BOOL isProperty;
    for (int i = 0; i < count; i++) {
        // 取出成员变量
        objc_property_t property = properties[i];
        
        // 成员变量名字
        NSString *keyValue = [NSString stringWithFormat:@"%s",property_getName(property)];
        [propertyArray addObject:keyValue];

    }
    //遍历字典,判断数组中有没有该元素,有则YES,一旦一个没有则返回NO
    [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        if ([propertyArray containsObject:key]) {
            ///有这个参
            isProperty = YES;
        }else {
            ///没有这个参
            isProperty = NO;
            return ;
        }
    }];
    return isProperty;
}

你可能感兴趣的:(iOS 判断某个值是否属于控制器的变量)