Что такое type erasure и зачем он нужен?
Суть
Type erasure — «стирание» конкретного типа за общим интерфейсом, чтобы работать с разными реализациями протокола как с одним типом: хранить их в одном массиве, свойстве, возвращать из функции, не раскрывая реализацию.
Исторически (до Swift 5.7) протокол с associatedtype или Self нельзя было использовать как тип вообще, и приходилось писать обёртки AnySequence, AnyPublisher, AnyView вручную. Сегодня в большинстве случаев это делает сам язык.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep