День 1 — Первые шаги в Swift
Сегодня мы научимся хранить текст и числа. Эти конструкции выглядят просто, но именно из них складывается состояние приложения: имя пользователя, количество покупок, цена, результат игры.
Константы: let
let создаёт значение, которое после присваивания нельзя заменить.
let name = "Ваня"
let birthYear = 2007
print(name)
print(birthYear)Если позже написать name = "Оля", компилятор остановит программу: константа уже получила значение. Это полезная защита. Используйте let по умолчанию и переходите к var, только когда изменение действительно требуется.
Переменные: var
var создаёт изменяемое значение.
var score = 0
score = 10
score += 5
print(score) // 15Тип значения при этом не меняется. Если score был целым числом, присвоить ему строку нельзя.
Что запомнить
let — значение не заменяется. var — значение может меняться. Оба имени получают конкретный тип.
Имена переменных
Swift обычно использует camelCase: первое слово начинается со строчной буквы, следующие — с заглавной.
let userName = "Аня"
let numberOfLessons = 16
let isCourseFinished = falseХорошее имя объясняет назначение значения. numberOfLessons полезнее, чем n, если это не короткая математическая формула.
Строки: String
Текст хранится в String и заключается в двойные кавычки.
let greeting = "Привет, Swift!"
let quote = "Он сказал: \"Поехали!\""
let path = "C:\\Projects\\Swift"Обратная косая черта экранирует символы: \" добавляет кавычку внутрь строки, а \\ — саму обратную косую черту.
У строки есть полезные свойства и методы:
let language = "Swift"
print(language.count) // 5
print(language.uppercased()) // SWIFT
print(language.hasPrefix("Sw")) // trueМногострочные строки
Текст на нескольких строках удобно заключать в тройные кавычки. Открывающие и закрывающие кавычки стоят на отдельных строках.
let plan = """
День 1: типы данных
День 2: Bool и интерполяция
День 3: коллекции
"""
print(plan)Отступ перед закрывающими кавычками задаёт базовый отступ, который Swift убирает из всех строк.
Целые числа: Int
Int хранит целые числа без дробной части — положительные, отрицательные и ноль.
let appCount = 3
let temperature = -12
let population = 8_100_000Подчёркивания внутри числа улучшают чтение и не меняют значение. Можно выполнять обычные операции:
let first = 12
let second = 5
print(first + second) // 17
print(first - second) // 7
print(first * second) // 60
print(first / second) // 2
print(first % second) // 2Деление двух Int отбрасывает дробную часть: 12 / 5 равно 2, а не 2.4.
Дробные числа: Double
Double хранит числа с дробной частью.
let price = 149.99
let ratio = 12.0 / 5.0
print(ratio) // 2.4Swift строго разделяет Int и Double. Их нельзя складывать без явного преобразования:
let files = 5
let averageSize = 2.5
let totalSize = Double(files) * averageSizeТак компилятор заставляет вас решить, какое представление числа нужно результату.
Type inference
Type inference (вывод типа) означает, что компилятор определяет тип по начальному значению.
let city = "Москва" // String
let stations = 263 // Int
let distance = 14.7 // DoubleПосле вывода тип закрепляется. Это даёт краткую запись без потери безопасности.
Type annotations
Type annotation (явное указание типа) записывается после двоеточия. Она нужна, когда тип нельзя вывести или вы хотите выбрать конкретный тип.
let score: Double = 0
var username: String = "guest"В первом примере без аннотации 0 стал бы Int. Не добавляйте аннотации повсюду: используйте их, когда они уточняют намерение.
Частая ошибка
Double не означает «любое число», а String не преобразуется в число автоматически. Swift предпочитает явные преобразования неожиданным результатам.
Небольшая практика
Создайте константы для названия приложения и года выпуска, переменную для количества запусков, увеличьте её на один и выведите значения. Затем попробуйте заменить var на let и прочитайте ошибку компилятора.
Checkpoint
Условие
Создайте данные профиля: имя, год рождения, рост в метрах и признак наличия подписки. Выведите одну строку с интерполяцией, а возраст рассчитайте из текущего года. Подберите тип каждого значения и объясните выбор.
Что нужно знать
letиvar;String,Int,Double,Bool;- интерполяция и явное преобразование типов.
Показать подсказку
Начните с let currentYear = 2026. Для текста используйте \(...); не превращайте числа в строки заранее.
Показать решение
let currentYear = 2026
let name = "Мира"
let birthYear = 2005
let height = 1.68
var hasSubscription = false
let age = currentYear - birthYear
print("\(name): \(age) лет, рост \(height) м, подписка: \(hasSubscription)")
hasSubscription = true
Комментарии
Вопросы, находки и подсказки по этой странице.
Войди, чтобы задать вопрос или помочь другим.