Objective- C Reflection - Получение универсального c типа NSArray - PullRequest
0 голосов
/ 11 июля 2020

Сейчас я пытаюсь прочитать свойства класса с отражением в Objective- C. Все работает с моим NSArray.

Это мое свойство:

@property(nonatomic) NSArray<CustomObject*>* tabs;

Я могу успешно получить доступ к своим свойствам моего класса с помощью:

objc_property_t *properties = class_copyPropertyList(class, &propertyCount);
for (unsigned int i = 0; i < propertyCount; i++) {
            objc_property_t property = properties[i];
            const char *propertyName = property_getName(property);
            const char *attrs = property_getAttributes(property);
}

Итак мое имя свойства вкладки . Все хорошо. Но это атрибуты "T @" NSArray ", &, N, V_tabs"

Как мне получить информацию о типе c generi моего NSArray? Спасибо заранее

1 Ответ

0 голосов
/ 12 июля 2020

, если ничего не хранится с indexedSubscript (он же [index]) вашего NSArray, он пуст, и только Xcode знает о вашем намерении, какой тип вы хотите сохранить там.

поэтому

@property(nonatomic) NSArray<CustomObject*>* tabs;

эквивалентно

@property(nonatomic) NSArray<NSObject*>* tabs;

эквивалентно

@property(nonatomic) NSArray<id>* tabs;

эквивалентно

@property(nonatomic) NSArray* tabs;

Приведенный выше список неверен на 100%, потому что Xcode может выдает ошибку, когда вы пытаетесь смешать типы данных и пытаться скомпилировать, поэтому он не должен доходить до точки, где вы храните неправильные типы данных. быть запрошенным во время выполнения.

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

...