Приведите пример использования дженериков в Swift
Что проверяют
Писали ли вы обобщённый код сами или только пользовались готовыми Array и Optional. Хороший пример показывает, что вы понимаете ограничения типов и разницу статической и динамической диспетчеризации. Следом почти наверняка спросят про some и any.
Как отвечать
Не берите пример, дублирующий стандартную библиотеку: обобщённая функция «вернуть последний элемент массива» вызовет встречный вопрос, зачем это, если есть array.last. Показывайте то, что реально пишут в проектах.
- сетевой слой:
func send<T: Decodable>(_ request: Request<T>) async throws -> T, где параметр типа задаёт модель ответа, а декодирование остаётся в одном месте; - переиспользование ячеек:
func dequeue<C: UITableViewCell>(for indexPath: IndexPath) -> C, тип выводится по месту вызова и приведение черезas!исчезает; - свой контейнер:
struct Stack<Element>сpushиpop, к немуextension Stack where Element: Equatableс методом поиска; - ограничения:
T: Hashable, условиеwhere,associatedtypeв протоколе. Из стандартной библиотеки удобно сослаться наResult<Success, Failure>.
Дальше разведите два слова, которые вечно путают. some P это непрозрачный тип: конкретный тип ровно один, компилятор его знает, вызовы статические. any P это контейнер, куда кладут значения разных типов, за гибкость платят динамической диспетчеризацией и обёрткой. С версии Swift 5.7 у протоколов есть первичные связанные типы, поэтому можно писать any Collection<String> и не терять тип элемента.
Хорошо добавить про производительность: при сборке модуля целиком компилятор специализирует дженерик под конкретные типы, так что обобщённый код не обязан быть медленнее рукописного.
Где спотыкаются
Объясняют дженерики как «Any, только удобнее». Any теряет тип и требует приведения в рантайме, дженерик проверяется на компиляции, это принципиально разные вещи.
Не умеют накладывать ограничения: пишут <T>, а внутри сравнивают значения или кладут их в словарь, забыв Equatable и Hashable.
Отвечают про some и any наугад. Разница формулируется одной фразой: some фиксирует один конкретный тип, any разрешает разные и потому дороже.