На дженерики (Generics).
Ассоциированные типы в протоколах (Associated Types) позволяют определить placeholder-имя типа внутри протокола, которое будет уточнено конкретным типом при принятии этого протокола. Это очень похоже на то, как дженерики используют placeholder-имена типов (например, T) в функциях, классах или структурах.
Пример ассоциированного типа:
swift
Пример использования дженерика:
swift
И в ассоциированных типах, и в дженериках мы используем символическое имя для типа, которое будет заменено конкретным типом по мере использования. Главное отличие в том1, что дженерики определяют типизированный параметр для структуры, класса или функции, а ассоциированные типы определяют требование к типу для протокола, которое должен выполнить соответствующий ему тип.