> Что такое примитивы в Swift и какие они бывают (iOS, Swift)
Уровень: junior · Роль: mobile · Категория: Технические вопросы
Компании: Яндекс
Стек: iOS, Swift
> Пример ответа
Короткий ответ
Примитивы в Swift - это базовые типы данных, предоставляемые стандартной библиотекой, которые хранят простые значения: числа, символы, логические значения. К ним относятся Int, Double, Float, Bool, Character, String, а также их варианты с фиксированной разрядностью (Int8, UInt16 и т.д.). В Swift примитивы реализованы как структуры, поэтому они передаются по значению и обладают дополнительными методами, но концептуально остаются простыми типами.
Подробное объяснение
В Swift нет отдельного понятия "примитив" в том смысле, как в C или Java. Все базовые типы - это структуры (struct), но они выполняют роль примитивов. Основные группы:
- Целочисленные: Int (платформозависимый, 64-bit на современных устройствах), UInt (беззнаковый), Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64.
- С плавающей точкой: Double (64-bit, используется по умолчанию), Float (32-bit), Float80 (на x86).
- Логический: Bool (true/false).
- Символьный: Character (одиночный символ Unicode).
- Строковый: String (коллекция Character, но ведёт себя как примитив).
Особенности:
- Все примитивы - value types: при присваивании копируются.
- Имеют встроенные методы и свойства (например,
Int.max,Double.pi). - Поддерживают литералы:
42,3.14,"hello",true. - Могут быть опциональными:
Int?,Double?и т.д.
На практике
При работе с примитивами важно помнить о:
- Выборе типа по размеру данных: для индексов массива - Int, для точных денежных расчётов - Decimal (не примитив), для графики - Float.
- Преобразовании типов:
Int("123"),Double(5),String(42). - Переполнении: арифметика по умолчанию не допускает переполнения (в debug - crash, в release - trap), для обхода -
&+,&-. - Опциональности:
Int?для парсинга строк,Bool?для трёхзначной логики.
Пример кода
SWIFTlet age: Int = 25let price: Double = 99.99let isActive: Bool = truelet letter: Character = "A"let name: String = "Swift"// Преобразованияlet numberFromString = Int("42") ?? 0let doubleFromInt = Double(age)let stringFromDouble = String(price)// Проверка диапазоновprint(Int8.min) // -128print(Int8.max) // 127// Переполнениеvar maxUInt8 = UInt8.max// maxUInt8 &+= 1 // так можно, но осторожно
Как отвечать на собеседовании
Начни с определения: примитивы - это базовые типы для хранения простых значений. Перечисли основные группы: целые, дробные, Bool, Character, String. Подчеркни, что в Swift они реализованы как структуры, поэтому передаются по значению. Упомяни про фиксированную разрядность и выбор типа под задачу. Если спросят про отличия от Objective-C - скажи, что в Swift нет NSNumber для всех чисел, есть конкретные типы. Приведи пример преобразования типов и упомяни опциональность.
Что проверяет интервьюер
- Понимание базовых типов и их назначения.
- Знание разницы между Int и UInt, Double и Float.
- Умение работать с преобразованиями и опциональностью.
- Понимание value semantics (копирование при присваивании).
- Осведомлённость о переполнении и безопасной арифметике.
Типичные ошибки
- Путаница между Int и UInt: использование UInt для отрицательных значений - ошибка компиляции.
- Незнание, что Double - тип по умолчанию для дробных литералов.
- Попытка использовать Float для точных расчётов (например, денег) - потеря точности.
- Забывание про опциональность при конвертации из строки:
Int("abc")возвращает nil. - Утверждение, что String - это массив Character (на самом деле это отдельный тип с оптимизациями).
> Похожие задачи по mobile
Какие есть приоритеты QoS в GCD и зачем они нужны
Почему многие против синглтона
Когда вызывается метод viewDidAppear
Как работает механизм управления памятью ARC в Swift
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью