Skip to content

День 2 — Простые типы данных, часть 2

Продолжим с двумя идеями, которые постоянно встречаются в приложениях: логическими значениями и созданием строк из данных.

Bool: да или нет

Bool хранит только true или false.

swift
let isLoggedIn = true
let hasNotifications = false

Логические имена удобно начинать с is, has, can или should: тогда код читается как вопрос. isLoggedIn — «пользователь вошёл?», canEdit — «можно редактировать?».

Переключение Bool

Метод toggle() меняет значение на противоположное.

swift
var isDarkMode = false
isDarkMode.toggle()

print(isDarkMode) // true

То же можно записать как isDarkMode = !isDarkMode, но toggle() яснее выражает намерение.

Соединение строк

Оператор + объединяет строки.

swift
let firstName = "Анна"
let lastName = "Смирнова"
let fullName = firstName + " " + lastName

Для пары коротких частей это нормально. Если значений много или среди них есть числа, интерполяция обычно читается лучше.

Интерполяция строк

Интерполяция позволяет вставлять значение внутрь текста с помощью \(value).

swift
let name = "Ваня"
let age = 18

print("Меня зовут \(name), мне \(age)")

Внутри \(...) можно выполнить небольшое выражение:

swift
let boxes = 4
let itemsPerBox = 6

print("Всего предметов: \(boxes * itemsPerBox)")

Не превращайте интерполяцию в сложную программу. Если вычисление трудно прочитать, дайте ему отдельное имя.

swift
let total = boxes * itemsPerBox
print("Всего предметов: \(total)")

Почему типы важны

Тип описывает допустимые операции. Bool можно переключить, String — привести к верхнему регистру, Int — делить с остатком. Компилятор знает эти правила и находит множество ошибок ещё до запуска.

swift
let answer = 42
// answer.uppercased() // Ошибка: у Int нет такого метода

Обрати внимание

Интерполяция умеет превратить распространённые Swift-значения в текст для отображения. Это не меняет тип исходной переменной.

Практика

Checkpoint

Условие

Создайте конвертер температуры. Задайте температуру в градусах Цельсия как Double, переведите её в градусы Фаренгейта по формуле F = C × 9 / 5 + 32, затем выведите обе температуры одной строкой.

Что нужно знать

  • Double для дробных вычислений;
  • арифметические операторы;
  • интерполяция строк.
Показать подсказку

Если все участвующие числа представлены как Double, результат не потеряет дробную часть. Для красивого текста можно добавить символ ° прямо в строку.

Показать решение
swift
let celsius = 21.0
let fahrenheit = celsius * 9 / 5 + 32

print("\(celsius)°C — это \(fahrenheit)°F")

При 21.0°C программа выведет 69.8°F.

Итог простых типов

  • String хранит текст;
  • Int — целые числа;
  • Double — дробные числа;
  • Booltrue или false;
  • let защищает значение от замены, var разрешает изменение;
  • type inference сокращает запись, а type annotations уточняют нужный тип;
  • интерполяция собирает понятный текст из значений.

Строки для людей и для данных

Raw string удобна, когда в тексте много кавычек или обратных слешей: #"Файл: \(name).json"#. Чтобы интерполяция сработала внутри неё, добавьте #: #"Файл: \#(name).json"#.

Для пользовательского интерфейса форматируйте значения, а не склеивайте их вручную:

swift
let progress = 0.725
print(progress.formatted(.percent.precision(.fractionLength(0))))

Интерполяция удобна для понятного текста и отладки, но не заменяет JSON-сериализацию или локализацию.

Переход между соседними страницами: и вне полей ввода.

ОБСУЖДЕНИЕ

Комментарии

Вопросы, находки и подсказки по этой странице.

Загружаем комментарии…