31. Зачем в Swift нужны дженерики?Теория
Дополнительные вопросы
1. Как ограничить дженерик протоколом?
2. Для чего в дженерике пишут where?
3. Какая диспетчеризация у дженерика?
1. Как ограничить дженерик протоколом?
2. Для чего в дженерике пишут where?
3. Какая диспетчеризация у дженерика?
Дженерик пишет одну реализацию для разных типов, и тип проверяется при компиляции. Не нужен Any и принудительное приведение.
Компилятор часто делает отдельную копию функции под конкретный тип. Такой вызов не медленнее обычного.
1. Ограничение пишут у параметра: func first<T: Equatable>(_ items: [T]). Типу разрешено только то, что есть у протокола.
2. where добавляет условия, которые не помещаются в угол скобок. Обычно это связанные типы: where T.Element: Equatable. Без этого по элементу коллекции нельзя вызвать требование протокола.
3. После специализации вызов прямой: тип уже известен. Если функция осталась общей и метод берётся из ограничения-протокола, вызов идёт через witness table.