Swift Academy · Урок

Оператор ?? и тернарный оператор с optional

Используйте ?? для значений по умолчанию и объединяйте операторы объединения с nil в цепочки

Урок 2 из 412 шагов

«Оператор ?? и тернарный оператор с optional» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

Оператор объединения с nil `??` предоставляет значение по умолчанию, когда опциональное значение равно nil. В сочетании с тернарным оператором он позволяет лаконично и выразительно обрабатывать опциональные значения.

Оператор ??

```swift let name: String? = nil let display = name ?? "Guest" print(display) // "Guest" let known: String? = "Alice" print(known ?? "Guest") // "Alice" ``` Если опциональное значение не равно nil, используется его извлечённое значение. В противном случае используется значение по умолчанию.

Вычисление с коротким замыканием

Правая часть `??` вычисляется только тогда, когда левая часть равна nil: ```swift func expensiveDefault() -> String { print("Computing...") return "Default" } let val: String? = "Existing" let result = val ?? expensiveDefault() // expensiveDefault not called ```

Цепочка операторов ??

Объединяйте несколько операторов `??`, чтобы последовательно проверять запасные варианты: ```swift let primary: String? = nil let secondary: String? = nil let fallback = "Anonymous" let user = primary ?? secondary ?? fallback print(user) // "Anonymous" ``` Вычисление останавливается на первом значении, не равном nil.

?? с вычисляемыми свойствами

```swift struct Config { var theme: String? var displayTheme: String { theme ?? "light" } } var c = Config() print(c.displayTheme) // "light" c.theme = "dark" print(c.displayTheme) // "dark" ``` Понятный шаблон задания значения по умолчанию в вычисляемых свойствах.

Тернарный оператор с опциональными значениями

Тернарное выражение `condition ? a : b` можно использовать для проверки опциональных значений: ```swift let score: Int? = 85 let label = score != nil ? "\(score!)" : "No score" ``` Но обычно `??` выглядит понятнее: ```swift let label = score.map { "\($0)" } ?? "No score" ```

Optional.map для преобразования

Преобразуйте обёрнутое значение опционального значения, не извлекая его: ```swift let maybeInt: Int? = 42 let maybeStr = maybeInt.map { "Value: \($0)" } // Optional("Value: 42") let nilInt: Int? = nil let nilStr = nilInt.map { "Value: \($0)" } // nil ```

flatMap для цепочек опциональных значений

Используйте `flatMap`, когда само преобразование возвращает опциональное значение: ```swift let str: String? = "123" let num = str.flatMap { Int($0) } // Optional(123) let bad: String? = "abc" let nil2 = bad.flatMap { Int($0) } // nil ```

Оператор присваивания ??= (не встроен)

В Swift нет встроенного оператора `??=`, но его можно сымитировать: ```swift var cache: [String: Int] = [:] // Assign only if nil: if cache["key"] == nil { cache["key"] = expensiveCompute() } // Or with a helper: func ??= (lhs: inout T?, rhs: @autoclosure () -> T) { if lhs == nil { lhs = rhs() } } ```

Рекомендации по читаемости

Выбирайте подходящий инструмент: • `??` — для простых значений по умолчанию • `if let` — когда извлечённое значение требуется в нескольких инструкциях • `guard let` — предварительное условие и ранний выход • `.map` / `.flatMap` — преобразование без извлечения значения Избегайте принудительного извлечения с помощью `!`, если случай nil действительно не может произойти.

Быстрая проверка

Что возвращает `optional ?? default`, когда `optional` равно `nil`?

Итоги

Ключевые выводы: • `a ?? b` — возвращает значение `a`, если оно не равно nil, иначе `b` • Выполняется с коротким замыканием: `b` вычисляется только когда `a` равно nil • Цепочка: `a ?? b ?? c` • `.map` преобразует обёрнутое значение; `.flatMap` обрабатывает преобразование, возвращающее Optional • Предпочитайте `??` сочетанию тернарного оператора с принудительным извлечением Далее: опциональная цепочка с помощью `?.`
Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Оператор ?? и тернарный оператор с optional» бесплатный?

Да — полный текст урока «Оператор ?? и тернарный оператор с optional» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Оператор ?? и тернарный оператор с optional»?

Используйте ?? для значений по умолчанию и объединяйте операторы объединения с nil в цепочки Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Оператор ?? и тернарный оператор с optional»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Привязка с if let и guard let
  2. Оператор ?? и тернарный оператор с optional
  3. Цепочка optional ?. оператор
  4. Неявно извлекаемые optional и случаи, когда их следует избегать
← Назад к Swift Academy