> Что такое примитивы в 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? для трёхзначной логики.

Пример кода

SWIFT
let age: Int = 25
let price: Double = 99.99
let isActive: Bool = true
let letter: Character = "A"
let name: String = "Swift"
// Преобразования
let numberFromString = Int("42") ?? 0
let doubleFromInt = Double(age)
let stringFromDouble = String(price)
// Проверка диапазонов
print(Int8.min) // -128
print(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 (на самом деле это отдельный тип с оптимизациями).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью