Как я могу перечислить все поля объекта в Objective-C?
Если у меня есть класс, как я могу перечислить все его имена переменных экземпляра?
например:
@interface MyClass : NSObject {
int myInt;
NSString* myString;
NSMutableArray* myArray;
}
Я хотел бы получить "myInt", "myString" и "myArray". Есть ли способ получить массив имен, которые я могу перебрать?
Я попытался найти документацию Objective-C, но ничего не нашел (и я не уверен, что это называется).
Ответы
Ответ 1
Как уже упоминалось, вы можете использовать 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);
Ответ 2
#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));
}
Ответ 3
Рассмотрим gen_bridge_metadata
, который предназначен для совершенно другой цели, но может создавать XML файлы из Objective-C файлов заголовков.