После преобразования в Swift 3 У меня проблемы с видимостью из Obj-C (Interface Builder не может найти класс контроллера во время выполнения). Поэтому я добавил @objc
отлаживать:Swift 3: Xcode утверждает, что универсальный класс является общим
@objc(ASSitesTableViewController)
class ASSitesTableViewController : GenericFRCTableVC<Site>
И Xcode выплевывает обратно:
Generic подклассы классов «@objc» не может иметь явный «@objc» атрибут, потому что они непосредственно не видно Objective -C
Но класс не является общим. Он наследуется только от класса, который был специализирован.
Я знаю, что подкласс специализированного типа является длинным выстрелом, поскольку он не был поддержан в более ранних версиях Swift, но он скомпилирован без жалоб. Я не ожидал, что мой класс будет пребывания generic.
Я не нашел упоминания о дженериках в разделе наследования документов Swift или наоборот.
Должен ли базовый класс быть неэквивалентным для того, чтобы подкласс был видимым для Obj-C?
Спасибо, что подтвердили. Большая проблема возникла из-за Swift 3, поскольку FRC (контроллер получаемых результатов) был сделан общим в этой версии, что я безуспешно пытался распространять по цепочке. – Andreas
Я знаю - у меня было много трудностей с новыми импортированными генериками. Однако имейте в виду, что импортированные генерические файлы являются ковариантными по параметризованному типу. Это может помочь во многих ситуациях. – matt
Все? Звучит больше похоже на безопасность типа разлома, чем на функцию, но я не мог найти документацию по этому поведению. Я думаю, что обычные массивы вели себя так же, пока Swift 2. https://youtu.be/n9yAJfYjcl4?t=39m6s – Andreas