31. Зачем в Swift нужны дженерики?Теория

Дополнительные вопросы

1. Как ограничить дженерик протоколом?

2. Для чего в дженерике пишут where?

3. Какая диспетчеризация у дженерика?

Темы

Дженерик пишет одну реализацию для разных типов, и тип проверяется при компиляции. Не нужен Any и принудительное приведение. Компилятор часто делает отдельную копию функции под конкретный тип. Такой вызов не медленнее обычного.

Дополнительные вопросы

1. Ограничение пишут у параметра: func first<T: Equatable>(_ items: [T]). Типу разрешено только то, что есть у протокола.

2. where добавляет условия, которые не помещаются в угол скобок. Обычно это связанные типы: where T.Element: Equatable. Без этого по элементу коллекции нельзя вызвать требование протокола.

3. После специализации вызов прямой: тип уже известен. Если функция осталась общей и метод берётся из ограничения-протокола, вызов идёт через witness table.