Как узнать тип дженериков Objective-C?

Xcode 7 содержит вариант Objective-C, где вы можете определить тип-подсказку для (однородных) NSArray возвращаемых значений и свойств, определенных как NSArray<UIImage*>.

Я хотел бы использовать эту функцию для перезаписи моего класса JSON-десериализатора (для которого требуются такие типы подсказок), ранее я решил это, добавив -(Class)jsonHintForKey:(NSString*)key к моим классам, которые имеют однородные массивы как свойства.)

Знаете ли вы, (и если да, как) я могу использовать среду выполнения Objective-C, чтобы получить класс этого нового типа подсказки во время выполнения?

Ответ 1

Легкие дженерики, представленные в Xcode 7, - это всего лишь подсказки времени компиляции, чтобы помочь компилятору вызывать предупреждения, но во время выполнения вы получаете такое же старое поведение, что и ваша переменная, всего лишь NSArray из id s.

Источник: WWDC '15" Быстрый и Objective-C сеанс взаимодействия >

Смотрите расшифровку беседы:

Таким образом, вся легкая универсальная функция основана на модели стирания типа . Это означает, что компилятор имеет всю эту богатую информацию о статическом типе, но он удаляет эту информацию при генерации кода.

Ответ 2

Это невозможно сделать.

Для улучшения моста между быстрым и objective-c были введены дженерики в objective-c. Преимущество, которое он дает objective-c, только полезно во время компиляции, и я теряю эту информацию во время выполнения.