美文网首页
cocoa 检测对象是否存在某一个成员变量属性

cocoa 检测对象是否存在某一个成员变量属性

作者: Living_元宝儿 | 来源:发表于2020-08-20 11:01 被阅读0次

//检测对象是否存在该属性 不带下划线的成员变量名

  • (BOOL)checkIsExistPropertyWithInstance:(id)instance verifyPropertyName:(NSString *)verifyPropertyName{
    unsigned int count;
    //获取对象里的属性列表
    objc_property_t *properties = class_copyPropertyList([instance class], &count);
    NSMutableArray *nameArray = [[NSMutableArray alloc] initWithCapacity:count];
    for (int i = 0; i < count; i++) {
    objc_property_t property = properties[i];
    //属性名转为字符串
    NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
    //判断属性是否存在
    if ([propertyName isEqualToString:verifyPropertyName]) {
    free(properties);
    return YES;
    }
    [nameArray addObject:propertyName];
    }
    free(properties);
    return NO;
    }

//获取类的成员变量名 带下划线的成员变量名

  • (NSArray *)getVariableNamesByObject:(id)object verifyPropertyName:(NSString *)verifyPropertyName{
    unsigned int numIvars = 0;
    //获取类的所有成员变量
    Ivar * ivars = class_copyIvarList([object class], &numIvars);
    //定义一个数组来接收获取的属性名
    NSMutableArray *nameArray = [[NSMutableArray alloc] initWithCapacity:numIvars];
    for(int i = 0; i < numIvars; i++) {
    //得到单个的成员变量
    Ivar thisIvar = ivars[i];
    //得到这个成员变量的类型
    const char *type = ivar_getTypeEncoding(thisIvar);
    NSString *stringType = [NSString stringWithCString:type encoding:NSUTF8StringEncoding];
    //此处判断非object-c类型时跳过
    if (![stringType hasPrefix:@"@"]) {
    continue;
    }
    //得到成员变量名
    NSString *variableName = [NSString stringWithUTF8String:ivar_getName(thisIvar)];
    [nameArray addObject:variableName];
    //这个函数可以得到成员变量的值
    if ([variableName hasSuffix:verifyPropertyName]) {
    id type1 = object_getIvar(object, thisIvar);
    NSLog(@"%@",[(NSTextField *)type1 stringValue]);
    }
    }
    free(ivars);
    return nameArray;
    }

相关文章

  • cocoa 检测对象是否存在某一个成员变量属性

    //检测对象是否存在该属性 不带下划线的成员变量名 (BOOL)checkIsExistPropertyWithI...

  • JavaScript学习笔记7_对象_2对象属性

    属性检测 JavaScript对象是属性的集合,我们经常需要判断某个属性是否存在于某个对象中。JavaScript...

  • 检测对象是否存在某个属性

    检测obj是否存在name属性。 1.in 关键字 不仅可以检测到对象自身的属性,还可以检测继承属性,比如 toS...

  • Java面向对象:类与对象

    一、类 类是封装对象的属性和行为的载体,在Java语言中对象的属性以成员变量的形式存在,而对象的方法以成员方法的形...

  • 02-面向对象

    类及对象 类的组成成分:属性(成员变量,Field)方法(成员方法,函数,Method) 属性成员变量 vs 局部...

  • Swift---10.属性

    属性(类,结构体或枚举中,某一个成员变量,就是该类,结构体或枚举的属性)存储属性 存在于类,结构体中,枚举中不存在...

  • 对象操作

    对象操作 1、添加属性、删除属性 2、in:检测对象是否拥有某一属性(包括继承到的) 如果in判断一个属性存在,这...

  • OC 的三种对象类型

    instance 对象, 存放着其成员变量的具体值, 以及 isa class 对象, 存放着成员变量, 属性, ...

  • 面向对象编程基础

    类与对象 成员变量 -在Java中对象的属性也称为成员变量,成员变量的定义与普通变量的定义一样 成员方法 1.成员...

  • python成员属性、实例属性、类属性

    1.成员属性/变量 self表示对象本身,name为类的成员属性成员属性:self.name,属于对象本身 以Te...

网友评论

      本文标题:cocoa 检测对象是否存在某一个成员变量属性

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