Как мне перечислить все поля объекта в Objective-C? - PullRequest
23 голосов
/ 31 июля 2009

Если у меня есть класс, как я могу перечислить все имена его переменных экземпляра?

например:

@interface MyClass : NSObject {
    int myInt;
    NSString* myString;
    NSMutableArray* myArray;
}

Я хотел бы получить «myInt», «myString» и «myArray». Есть ли какой-нибудь способ получить массив имен, по которым я могу перебрать?

Я попытался найти документацию по Objective-C, но ничего не смог найти (и я не уверен, как это называется).

Ответы [ 3 ]

42 голосов
/ 31 июля 2009

Как уже упоминалось, вы можете использовать API времени выполнения Objective C для получения имен переменных экземпляра:

unsigned int varCount;

Ivar *vars = class_copyIvarList([MyClass class], &varCount);

for (int i = 0; i < varCount; i++) {
    Ivar var = vars[i];

    const char* name = ivar_getName(var);
    const char* typeEncoding = ivar_getTypeEncoding(var);

    // do what you wish with the name and type here
}

free(vars);
4 голосов
/ 10 апреля 2013
#import <objc/runtime.h>


NSUInteger count;
Ivar *vars = class_copyIvarList([self class], &count);
for (NSUInteger i=0; i<count; i++) {
    Ivar var = vars[i];
    NSLog(@"%s %s", ivar_getName(var), ivar_getTypeEncoding(var));
}
free(vars);
0 голосов
/ 31 июля 2009

Рассмотрим gen_bridge_metadata, который предназначен для совершенно другой цели, но может создавать файлы XML из заголовочных файлов Objective-C.

...