Базовые типы и операции
Любая программа крутится вокруг нескольких фундаментальных типов: целых чисел, дробных, строк и логических значений.
Суть урока: Swift не делает неявных преобразований между типами. Хотите сложить Int и Double — преобразуйте явно. Это занудно, но спасает от тонких багов.
Познакомимся с базовым набором. Int — целые числа (10, -3, 0). Double — числа с плавающей точкой (3.14, -0.5). String — текст ("привет"). Bool — логическое значение (true или false). Эти четыре типа покрывают огромную долю повседневного кода.
let likes: Int = 42
let rating: Double = 4.8
let title: String = "SwiftUI"
let isPublished: Bool = true
let total = likes + 8 // 50, Int
let area = 3.0 * rating // 14.4, DoubleС арифметикой всё привычно: +, -, *, /, остаток %. Но есть подвох. Swift не разрешит сложить Int и Double напрямую — типы должны совпадать:
let count = 5 // Int
let price = 9.99 // Double
// let bad = count * price // ОШИБКА
let good = Double(count) * price // 49.95, явное преобразованиеЧтобы сложить разные типы, мы оборачиваем одно значение в конструктор другого: Double(count). Это явное преобразование типов. Многие новички ругаются на эту строгость, но именно она не даёт случайно потерять дробную часть или получить переполнение.
Строки в Swift умеют многое: их можно склеивать оператором +, измерять (title.count), приводить к верхнему регистру (title.uppercased()) и собирать через интерполяцию \(...).
Попробуй сам ▶ — запусти код прямо в браузере (Pyodide). Здесь нет Swift, но логика та же, что под капотом мобильного кода:
# Та же арифметика и преобразования — но на Python.
# Здесь видно, ЗАЧЕМ Swift требует явности:
count = 5
price = 9.99
# В Python int*float работает молча — иногда это маскирует ошибки
print('total =', count * price)
# Имитируем строгость Swift: преобразуем вручную
total = float(count) * price
print('explicit =', round(total, 2))
# Строки
title = 'SwiftUI'
print(title.upper(), 'длина:', len(title))Как работает под капотом
Числа в памяти хранятся по-разному: Int на 64-битном устройстве занимает 64 бита и хранит точное целое; Double следует стандарту IEEE 754 и хранит число в виде мантиссы и экспоненты, из-за чего возможны крошечные погрешности (например, 0.1 + 0.2 не равно ровно 0.3). Понимание этого спасает от загадочных багов в финансовых расчётах, где обычно используют специальные типы вроде Decimal.
Частые ошибки
- Ожидать неявного преобразования.
IntиDoubleне складываются автоматически. - Целочисленное деление.
7 / 2для двух Int даёт 3, а не 3.5 — дробная часть отбрасывается. - Сравнивать Double на точное равенство. Из-за погрешностей лучше сравнивать с допуском.
Best practices
- Для денег используйте Decimal, а не Double.
- Преобразуйте типы явно и осознанно — это документирует намерение.
- Используйте интерполяцию строк вместо длинной склейки через +.
Итоги. Int, Double, String и Bool — рабочие лошадки Swift. Язык требует явных преобразований между числовыми типами, и эта строгость — не каприз, а защита от тихих потерь данных.
Шире контекста
Строгая типизация Swift на первый взгляд кажется придиркой, но именно она отличает язык, на котором пишут банковские и медицинские приложения. Представьте расчёт скидки, где случайно сложили рубли как целое число и проценты как дробное — без явных преобразований такая ошибка тихо исказила бы сумму. Swift заставляет вас осознанно сказать «да, я хочу преобразовать одно в другое», и в этот момент вы перепроверяете логику. Со временем вы начнёте ценить и набор числовых типов: Int для счётчиков и индексов, Double для измерений и физики, Decimal для денег, где недопустима даже крошечная погрешность. Понимание, какой тип выбрать под задачу, — признак инженерной зрелости. А интерполяция строк, которую мы освоили, будет сопровождать вас повсюду: от отладочных print до текста на кнопках в SwiftUI.