假设我有2个Person
类实例。一个名叫约翰和一个玛丽。 Person
类有2个属性age
和gender
。有没有办法对所有实例的属性进行迭代,并检查当前属性是否等于给定属性?像这样:
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;
}
答案 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");
}