在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;
}