На самом деле мне на практике type erasure встречалось не так часто, но возможно где-то активно используется, так же иногда спрашивают про сокрытие типов на собесов. Статья является кратким конспектом видео с ютуба "Type Erasure (Стирание типов), Copy on write в Swift". Начнем с примера обычной реализации протокола с associatedtype: Когда класс просто имплементирует протокол, проблем нет: Когда же мы указываем для параметра условие, что он должен реализовывать протокол, получаем ошибку: Для обхода этой ошибки существует обходной путь Type Erasure - стирание типов, он так же применяется в самом Swift для AnyHashable, AnyIterator, AnySequence, AnyCollection и т.д. Это делается в три шага. 1) Создаем имитацию абстрактного класса, который имплементирует наш протокол: 2) Создаем класс-обертку от _AnyMapperBox: 2) Создаем класс-обертку от _AnyMapperBox: 3) Создаем структуру, которая имеет параметр типа нашего "абстрактного" класса, при иницилизации используем уже класс-обертку Теперь пос