在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;
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。