Какие типы данных бывают в Swift
Что проверяют
Различаете ли вы значимые и ссылочные типы и понимаете ли роль опционалов.
Как отвечать
Первое разделение по семантике:
- значимые типы: структуры, перечисления, кортежи. Копируются при присваивании;
- ссылочные типы: классы, замыкания, акторы. Копируется ссылка.
Практически все базовые типы стандартной библиотеки значимые, включая числа, строки и коллекции. Это осознанное решение языка, а не мелочь: оно устраняет целый класс ошибок с неожиданным изменением данных.
Базовые типы: Int со знаком и разрядными вариантами, беззнаковые, Double и Float, Bool, String, Character. Целочисленные операции по умолчанию аварийно завершают программу при переполнении, а не молча заворачиваются, как в C. Для намеренного переполнения есть отдельные операторы.
Коллекции: массив, множество, словарь, диапазон, кортеж.
Опционал это ключевой тип языка и на самом деле перечисление с двумя случаями. Пустой ссылки в привычном виде нет: если значения может не быть, это отражено в типе, и компилятор заставит его развернуть. Именно так закрывается самая частая ошибка мобильных приложений.
Перечисления с ассоциированными значениями делают перечисление полноценным типом-суммой: каждый случай может нести свои данные. Отсюда моделирование состояния экрана одним значением вместо набора флагов.
Обобщённые типы и протоколы: тип может быть параметризован, а протокол использоваться и как ограничение, и как тип значения.
Про универсальные типы стоит упомянуть отдельно: Any подходит для любого значения, AnyObject только для ссылочных. Использовать их в прикладном коде обычно означает потерю типовой безопасности.
Где спотыкаются
Считают строки и массивы ссылочными по привычке.
Разворачивают опционалы принудительным восклицательным знаком.
Не знают, что переполнение целого аварийно завершает программу.
Не используют перечисления с данными и моделируют состояние флагами.