Зачем нужны опционалы в Swift-приложении, которое не работает с сетью?

«Зачем нужны опционалы в Swift-приложении, которое не работает с сетью?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Опционалы (Optional) в Swift решают фундаментальную задачу явного представления отсутствия значения (nil). Их необходимость не зависит от наличия сети.

Основные причины использования в оффлайн-приложениях:

  1. Моделирование неполных данных: Пользователь мог не заполнить поле (например, отчество, дату рождения).

    struct UserProfile {
        var name: String
        var middleName: String? // Опционально
        var age: Int?
    }
  2. Безопасный доступ к ресурсам: Файл или запись в локальной БД (CoreData/Realm) может отсутствовать.

    let savedDocumentURL: URL? = FileManager.default.urls(...).first
    if let url = savedDocumentURL {
        let data = try Data(contentsOf: url)
    }
  3. Временные или вычисляемые состояния: Значение еще не рассчитано или не выбрано.

    var selectedItemIndex: Int? // Ничего не выбрано
    var cachedCalculationResult: Double? // Кэш может быть пустым
  4. Работа с делегатами и weak-ссылками: Делегат может быть не установлен.

    weak var delegate: SomeDelegate? // Автоматически опционал

Преимущество: Компилятор заставляет безопасно обрабатывать nil (через if let, guard let, ??, !), что предотвращает runtime-краши и делает намерения разработчика явными.