我正在解析一些xml,并且我经常用新特性更新服务器。所以,当我添加新标记或其他东西时,我的应用程序(解析数据)在我调用时崩溃,因为currentElementValue还不是我的类的一部分。是否有任何方法来检查类是否有属性,或者我是否应该捕捉引发的异常?
[a setValue:currentElementValue forKey:elementName];
谢谢
qxgroojn1#
很简单:
if (class_getProperty([object class], "propertyName")) { // it has that property! }
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)]) {
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以查看如何获取对象的属性。
dldeef674#
适用于Swift5
if class_getProperty([object class], "propertyName") != nil { // it has that property! }
4条答案
按热度按时间qxgroojn1#
很简单:
pw136qt22#
如果您没有覆盖标准的setter和getter名称,则可以用途:
对于名为“prop”的属性的setter方法,或者:
用于其吸气方法。
否则,如果使用如下语法:
定义属性时,请使用具有上述语法的相应名称:
wztqucjr3#
首先,您需要大写您的财产名称的第一个字母。
然后,您需要创建一个选择器来设置该属性。(如果您有一个名为“foo”的属性,那么默认情况下,该属性的setter名为“setFoo:“)。
然后就像塞尔吉奥的回答一样,叫道:
检查this post以查看如何获取对象的属性。
dldeef674#
适用于Swift5