2013-02-11 2 views
0

У меня это в коде, но я хочу определить, что не только объект отвечает на селектор, но тип значения соответствует типу свойства.Objective C Определить значение подходит для установки

if ([object respondsToSelector:NSSelectorFromString(propName)]) 
     [object setValue:value forKey:propName]; 

Например, если значение является логическим значением, а свойство является строкой, я хочу, если короткое замыкание.

+3

Что вы имеете в виду? –

+2

Нет простого способа сделать это, но вы можете определить тип свойства @ во время выполнения, а затем сравнить это с типом значения. См. Http://stackoverflow.com/questions/769319/how-to-detect-a-property-return-type-in-objective-c –

+0

Насколько общий подход необходим? Для конкретного объекта для определенного свойства? Или вы пытаетесь внедрить статическую типизацию во время выполнения на всем языке? –

ответ

1

использовать эту категорию NSObject+Properties, Категория Расширяет NSObject, добавляя возможность, среди прочего, проверять, имеет ли объект свойство.

- (BOOL) hasPropertyNamed: (NSString *) name; 
- (BOOL) hasPropertyNamed: (NSString *) name ofType: (const char *) type; 
- (BOOL) hasPropertyForKVCKey: (NSString *) key; 
+0

Пожалуйста, добавьте некоторое объяснение того, что делает этот код, возможно, включая некоторые соответствующие фрагменты и почему вы считаете, что это решит проблему. Сообщения, которые состоят исключительно из ссылок, не являются хорошими ответами. –

2

Вы также можете выполнить это, переопределив ваш сеттер. Таким образом, вам не нужно проверять каждое место, где вы устанавливаете свойство.

- (void) setSomeString:(NSString *)someString { 
    if (![someString isKindOfClass:[NSString class]]) return; 

    _someString = someString; 
} 
Смежные вопросы