美文网首页
iOS 判断某个值是否属于控制器的变量

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

作者: AnthonyChen | 来源:发表于2018-07-02 16:09 被阅读60次

    在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 判断某个值是否属于控制器的变量

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