Цепочки значений по умолчанию
Аккуратно объединяйте несколько запасных вариантов.
«Цепочки значений по умолчанию» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Больше одного fallback
Иногда есть несколько источников опциональных значений, и требуется получить первое непустое. Можно объединить несколько операторов ?? в цепочку.
let primary: String? = nil
let secondary: String? = "Backup"
let name = primary ?? secondary ?? "Default"
print(name)Как читается цепочка
Читайте a ?? b ?? c так: используйте a, если оно не пусто, иначе b, иначе c. Вычисление останавливается на первом найденном значении.
let a: Int? = nil
let b: Int? = nil
let c = 7
print(a ?? b ?? c)Побеждает первое непустое значение
Как только один из вариантов предоставляет значение, остальные игнорируются. Здесь побеждает secondary, а итоговое значение по умолчанию никогда не используется.
let primary: Int? = nil
let secondary: Int? = 50
let fallback = 0
print(primary ?? secondary ?? fallback)Все значения, кроме последнего, опциональны
В цепочке каждый операнд, кроме последнего, обычно является опциональным значением. Последний операнд — гарантированное необязательное значение по умолчанию.
let nick: String? = nil
let full: String? = nil
let result: String = nick ?? full ?? "Anonymous"
print(result)Вычисление с коротким замыканием
Как и && с ||, цепочка ?? использует короткое замыкание. После нахождения значения последующие выражения не вычисляются.
func makeDefault() -> Int {
print("default computed")
return 0
}
let found: Int? = 9
print(found ?? makeDefault())Правая ассоциативность
Оператор ?? правоассоциативен, поэтому a ?? b ?? c группируется как a ?? (b ?? c). Именно такое поведение нужно для fallback-значений.
let x: Int? = nil
let y: Int? = nil
let z: Int? = 3
print(x ?? (y ?? (z ?? 0)))Значения по умолчанию в многоуровневой конфигурации
Цепочки особенно полезны для многоуровневой конфигурации: сначала настройка пользователя, затем настройка приложения, затем значение по умолчанию, заданное в коде.
let userTheme: String? = nil
let appTheme: String? = "light"
let theme = userTheme ?? appTheme ?? "system"
print(theme)Сочетание с преобразованиями
Можно объединить преобразования, которые могут завершиться неудачей, с итоговым значением по умолчанию, чтобы надёжно разобрать входные данные.
let raw: String? = nil
let parsed = raw.flatMap { Int($0) } ?? 0
print(parsed)Поиск в словарях внутри цепочки
Несколько поисков в словарях можно объединить в цепочку, чтобы использовать первый доступный ключ.
let prefs = ["color": "blue"]
let pick = prefs["accent"] ?? prefs["color"] ?? "gray"
print(pick)Делайте цепочки короткими
Цепочки из two или three fallback читаются хорошо. Если цепочка становится длиннее, для ясности вынесите эту логику в функцию.
let one: String? = nil
let two: String? = nil
let three = "C"
print(one ?? two ?? three)Тип результата цепочки
Итоговый результат цепочки не является опциональным, если последний операнд не является опциональным. Поэтому значение безопасно использовать сразу.
let v1: Int? = nil
let v2: Int? = 4
let total: Int = (v1 ?? v2 ?? 0) + 1
print(total)Быстрая проверка
Проверьте цепочки fallback.
Итоги: объединение значений по умолчанию
Объединяйте операторы ?? в цепочку, чтобы последовательно проверить несколько опциональных значений и прибегнуть к итоговому значению по умолчанию. Побеждает первое непустое значение, вычисление выполняется с коротким замыканием, а результат не является опциональным.
let p: String? = nil
let s: String? = "ok"
print(p ?? s ?? "none")Часто задаваемые вопросы
Урок «Цепочки значений по умолчанию» бесплатный?
Да — полный текст урока «Цепочки значений по умолчанию» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Цепочки значений по умолчанию»?
Аккуратно объединяйте несколько запасных вариантов. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Цепочки значений по умолчанию»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Оператор объединения с nil
- Цепочки значений по умолчанию
- Значения параметров функций по умолчанию
- Индексы словаря со значениями по умолчанию