День 2 — Простые типы данных, часть 2
Продолжим с двумя идеями, которые постоянно встречаются в приложениях: логическими значениями и созданием строк из данных.
Bool: да или нет
Bool хранит только true или false.
let isLoggedIn = true
let hasNotifications = falseЛогические имена удобно начинать с is, has, can или should: тогда код читается как вопрос. isLoggedIn — «пользователь вошёл?», canEdit — «можно редактировать?».
Переключение Bool
Метод toggle() меняет значение на противоположное.
var isDarkMode = false
isDarkMode.toggle()
print(isDarkMode) // trueТо же можно записать как isDarkMode = !isDarkMode, но toggle() яснее выражает намерение.
Соединение строк
Оператор + объединяет строки.
let firstName = "Анна"
let lastName = "Смирнова"
let fullName = firstName + " " + lastNameДля пары коротких частей это нормально. Если значений много или среди них есть числа, интерполяция обычно читается лучше.
Интерполяция строк
Интерполяция позволяет вставлять значение внутрь текста с помощью \(value).
let name = "Ваня"
let age = 18
print("Меня зовут \(name), мне \(age)")Внутри \(...) можно выполнить небольшое выражение:
let boxes = 4
let itemsPerBox = 6
print("Всего предметов: \(boxes * itemsPerBox)")Не превращайте интерполяцию в сложную программу. Если вычисление трудно прочитать, дайте ему отдельное имя.
let total = boxes * itemsPerBox
print("Всего предметов: \(total)")Почему типы важны
Тип описывает допустимые операции. Bool можно переключить, String — привести к верхнему регистру, Int — делить с остатком. Компилятор знает эти правила и находит множество ошибок ещё до запуска.
let answer = 42
// answer.uppercased() // Ошибка: у Int нет такого методаОбрати внимание
Интерполяция умеет превратить распространённые Swift-значения в текст для отображения. Это не меняет тип исходной переменной.
Checkpoint
Условие
Создайте конвертер температуры. Задайте температуру в градусах Цельсия как Double, переведите её в градусы Фаренгейта по формуле F = C × 9 / 5 + 32, затем выведите обе температуры одной строкой.
Что нужно знать
Doubleдля дробных вычислений;- арифметические операторы;
- интерполяция строк.
Показать подсказку
Если все участвующие числа представлены как Double, результат не потеряет дробную часть. Для красивого текста можно добавить символ ° прямо в строку.
Показать решение
let celsius = 21.0
let fahrenheit = celsius * 9 / 5 + 32
print("\(celsius)°C — это \(fahrenheit)°F")При 21.0°C программа выведет 69.8°F.
Итог простых типов
Stringхранит текст;Int— целые числа;Double— дробные числа;Bool—trueилиfalse;letзащищает значение от замены,varразрешает изменение;- type inference сокращает запись, а type annotations уточняют нужный тип;
- интерполяция собирает понятный текст из значений.
Строки для людей и для данных
Raw string удобна, когда в тексте много кавычек или обратных слешей: #"Файл: \(name).json"#. Чтобы интерполяция сработала внутри неё, добавьте #: #"Файл: \#(name).json"#.
Для пользовательского интерфейса форматируйте значения, а не склеивайте их вручную:
let progress = 0.725
print(progress.formatted(.percent.precision(.fractionLength(0))))Интерполяция удобна для понятного текста и отладки, но не заменяет JSON-сериализацию или локализацию.
Комментарии
Вопросы, находки и подсказки по этой странице.
Войди, чтобы задать вопрос или помочь другим.