Что делают операторы ?, ! и ???ios-32

1. Оператор ?

Этот оператор используется для работы с опциональными типами (Optional) в Swift.

Основные случаи применения:

  • Объявление опциональных переменных:

    var name: String? // может содержать String или nil
    
  • Optional Chaining (опциональное связывание):

    let length = person?.name?.count // безопасно получаем count
    

    Если person или name равно nil, выражение вернет nil без ошибки.

Особенности:

  • Позволяет безопасно работать с потенциально nil-значениями
  • Результат всегда будет опциональным типом

2. Оператор !

Используется для принудительного извлечения значения из опционала.

Примеры:

let definiteString: String = possibleString! // принудительное извлечение

Важные нюансы:

  • Вызовет runtime error, если значение равно nil
  • Следует использовать только когда вы абсолютно уверены, что значение не nil
  • Часто встречается при работе с IBOutlets (но это не лучшая практика)

3. Оператор ??

Предоставляет значение по умолчанию для опционалов.

Синтаксис:

let value = optionalValue ?? defaultValue

Пример:

let username = enteredName ?? "Anonymous"

Особенности работы:

  • Если optionalValue содержит значение, оператор возвращает его
  • Если optionalValue равен nil, возвращается defaultValue
  • Эквивалентен следующей записи:
    optionalValue != nil ? optionalValue! : defaultValue
    

Сравнение операторов в реальных сценариях

// Безопасный подход
let safeAge = person?.age ?? 0

// Опасный подход (может упасть)
let unsafeAge = person!.age!

Рекомендации по использованию

  1. Предпочитайте ? и ?? вместо ! где это возможно
  2. Используйте ! только когда уверены в наличии значения
  3. Всегда проверяйте опционалы перед принудительным извлечением

Резюмируем

  • ? - для безопасной работы с опционалами (Optional Chaining)
  • ! - для принудительного извлечения значений (Force Unwrap)
  • ?? - для предоставления значения по умолчанию (Nil-Coalescing)