Objective-C:如何检查2个属性是否相同?

时间:2011-07-21 21:24:48

标签: iphone objective-c ipad macos

假设我有2个Person类实例。一个名叫约翰和一个玛丽。 Person类有2个属性agegender。有没有办法对所有实例的属性进行迭代,并检查当前属性是否等于给定属性?像这样:

for (iterate thorough all properties of instance mary) {
//first iteration
@selector(mary.age)==@selector(john.age) //this would be YES;

//second iteration
@selector(mary.gender)==@selector(john.age) //this would be NO;
}

3 个答案:

答案 0 :(得分:3)

此问题解决了如何列出对象将响应的选择器:

List selectors for Objective-C object

使用它和NSObject协议的-respondsToSelector:方法的组合,您可以列出john的所有选择器,检查mary是否响应它们,反之亦然。

答案 1 :(得分:1)

请参阅Printing all declared properties of an object进行迭代并获取属性名称。您可能需要将它们添加到集合中然后进行比较。如果要检查类型,可以帮助您阅读objc运行时指南中的Declared Properties

答案 2 :(得分:1)

您可以将商标名称设为NSStrings并使用isEqualToString:方法进行比较。

for (iterate thorough all properties of instance mary) {

//first iteration
NSString *marryProperty = [NSString stringWithCString:property_getName(mary.age)
                                            encoding:NSUTF8StringEncoding];
NSString *johnProperty = [NSString stringWithCString:property_getName(john.age)
                                            encoding:NSUTF8StringEncoding];

if([marryProperty isEqualToString:johnProperty])
   NSLog(@"YES");
else 
   NSLog(@"NO");
}