Как узнать тип дженериков 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, только полезно во время компиляции, и я теряю эту информацию во время выполнения.