Как получить значение переменной на основе ее имени строки?

Я хочу получить значение всех иваров в классе Objective-C и загрузить их в массив.

У меня есть следующий код:

Class class = [self class];
NSString *myClassName = NSStringFromClass([self class]);
unsigned int count;
Ivar *ivars = class_copyIvarList(class, &count);
for (int i=0; i<count; i++) {
    Ivar ivar = ivars[i];
    const char* name = ivar_getName(ivar);
    const char* typeEncoding = ivar_getTypeEncoding(ivar);
    NSLog(@"Class Name: %@ ivar: %s  Type Encoding: %s",myClassName, name, typeEncoding);
}

Итак, у меня есть имя в виде строки (имя), и теперь мне нужно значение этого ivar.

Что-то типа:

value = [self valueFromStringName(name)];

Так что, если у меня есть дата с именем myDate, я могу передать строку myDate в метод, и он вернет значение даты, которое она содержит.

Я видел подпрограммы, которые запускают методы из строкового имени метода, но не видел, где можно получить значение из строкового имени.


person KarlJay    schedule 02.04.2016    source источник


Ответы (1)


Учитывая, что вы уже используете функции времени выполнения, почему бы не продолжить и не использовать:

id object_getIvar(id object, Ivar ivar)

чтобы получить значение ivar?

Если вы действительно хотите использовать строку, посмотрите KVC, «Шаблоны поиска доступа для простых атрибутов» и valueForKey: на NSObject.

ХТН

person CRD    schedule 02.04.2016