Каковы особенности языка Swift?
Что проверяют
Отвечаете ли вы набором маркетинговых слов («быстрый, безопасный, современный») или можете объяснить, какими механизмами эта безопасность достигается. Вопрос открытый специально: интервьюер смотрит, куда вы пойдёте сами. Следом почти всегда идёт уточнение про разницу struct и class или про то, что изменилось в Swift 6.
Как отвечать
Соберите ответ вокруг нескольких опор:
- типы и опционалы: строгая статическая типизация с выводом типов, отсутствие значения выражается через
Optional, поэтому «случайного nil» нет, есть явныеif let,guard letи??; - значимые типы:
structиenumкопируются по значению, коллекции используют copy-on-write, поэтому копия дешёвая.classэто ссылка и общая изменяемость; - перечисления:
enumс ассоциированными значениями плюсswitchс проверкой полноты на этапе компиляции; - протоколы и обобщения: расширения, реализации по умолчанию,
someиanyдля непрозрачных и экзистенциальных типов; - память: ARC, а не сборщик мусора. Циклы ссылок разрываются вручную через
weakиunowned; - ошибки:
throws,try,do-catch, а с Swift 6 ещё и типизированныеthrows; - конкурентность:
async/await, структурированные задачи иTaskGroup, акторы и@MainActor. В режиме языка Swift 6 проверкаSendableстрогая, и гонка данных становится ошибкой компиляции; - метапрограммирование: макросы вроде
@Observable, property wrappers и result builders, на которых стоит DSL SwiftUI.
Добавьте про совместимость с Objective-C и C++ и про то, что Swift работает не только на платформах Apple.
Где спотыкаются
Называют язык безопасным и не могут привести ни одного механизма. Опционалы, проверка полноты switch и изоляция акторов это конкретные ответы.
Путают ARC со сборщиком мусора. ARC расставляет подсчёт ссылок на этапе компиляции и циклы сам не собирает.
Глушат ошибки изоляции в Swift 6 через @unchecked Sendable и nonisolated(unsafe), не понимая, что это обещание компилятору, а не решение проблемы.