2010-06-17 2 views
13

Предположим, что в Apple API версии 1.0 существует класс NSFoo с свойством «цвет». API 1.1 добавляет свойство «размер».Как вы можете узнать, имеет ли NSObject определенное свойство?

Я хочу знать, могу ли я использовать поглотитель: myFoo.size

[MYFOO respondsToSelector: @selector (GETSIZE)] не работает, как ожидалось.

Каков правильный способ узнать, имеет ли объект свойство? Благодаря!

ответ

36

Вы близко. Ваш селектор должен быть именно тем сообщением, которое вы хотите отправить на объект:

if ([myFoo respondsToSelector:@selector(size)]) { 
    int size = [myFoo size]; // or myFoo.size in dot-notation. 
    // ... 
} 

должно работать.

+5

Следует отметить, что это связано с тем, что по умолчанию getters для свойств опускают префикс 'get'. В отличие от сеттеров, у которых есть префикс 'set'. – Senseful

+0

Ха-ха, упс. Благодаря! – strawtarget

+0

Как я могу сделать это наоборот? Если я хочу установить размер на Foo? myFoo не знает свойства класса, поэтому я не могу получить доступ к размеру. –