Цель-C: Как проверить, являются ли 2 свойства одинаковыми или нет? - PullRequest
1 голос
/ 22 июля 2011

Допустим, у меня есть 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;
}

Ответы [ 3 ]

3 голосов
/ 22 июля 2011

Этот вопрос посвящен тому, как составить список селекторов, на которые будет реагировать объект:

Список селекторов для объекта Objective-C

Использование комбинации этого иМетод -respondsToSelector: протокола NSObject, вы можете перечислить все селекторы для Джона, проверить, отвечает ли Мэри на них, и наоборот.

1 голос
/ 22 июля 2011

Вы можете получить имя свойства как 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");
}
1 голос
/ 22 июля 2011

См. Печать всех объявленных свойств объекта для итерации и получения имени свойств. Возможно, вам придется добавить их в набор, а затем сравнить. Если вы хотите проверить тип, это может помочь вам прочитать Объявленные свойства в руководстве по времени выполнения objc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...