ios 如何查看类是否具有属性?

u59ebvdq  于 2023-03-09  发布在  iOS
关注(0)|答案(4)|浏览(169)

我正在解析一些xml,并且我经常用新特性更新服务器。所以,当我添加新标记或其他东西时,我的应用程序(解析数据)在我调用时崩溃,因为currentElementValue还不是我的类的一部分。是否有任何方法来检查类是否有属性,或者我是否应该捕捉引发的异常?

[a setValue:currentElementValue forKey:elementName];

谢谢

qxgroojn

qxgroojn1#

很简单:

if (class_getProperty([object class], "propertyName")) {
    // it has that property!
}
pw136qt2

pw136qt22#

如果您没有覆盖标准的setter和getter名称,则可以用途:

if ([object respondsToSelector:@selector(setProp:)]) {

对于名为“prop”的属性的setter方法,或者:

if ([object respondsToSelector:@selector(prop)]) {

用于其吸气方法。
否则,如果使用如下语法:

@property (assign, getter=hasProp) BOOL prop;

定义属性时,请使用具有上述语法的相应名称:

if ([object respondsToSelector:@selector(hasProp)]) {
wztqucjr

wztqucjr3#

首先,您需要大写您的财产名称的第一个字母。

NSString *capitalizedProperty = [NSString stringWithFormat:@"%@%@", [[propertyName substringToIndex:1] uppercaseString], [propertyName substringFromIndex:1]];

然后,您需要创建一个选择器来设置该属性。(如果您有一个名为“foo”的属性,那么默认情况下,该属性的setter名为“setFoo:“)。

SEL propertySetter = NSSelectorFromString([NSString stringWithFormat:@"set%@:",capitalizedProperty]);

然后就像塞尔吉奥的回答一样,叫道:

if ([object respondsToSelector:propertySetter])
{
    [object setValue:value forKey:propertyName];
}

检查this post以查看如何获取对象的属性。

dldeef67

dldeef674#

适用于Swift5

if class_getProperty([object class], "propertyName") != nil {
    // it has that property!
}

相关问题