Как сложить два Optional значения в Swift?

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

Ответ

Непосредственно складывать опционалы оператором + нельзя, так как Optional — это перечисление (Optional<Wrapped>). Для сложения значений необходимо сначала извлечь (unwrap) содержимое, обрабатывая случай nil.

Основные подходы:

  1. Optional Binding (if let/guard let):

    let a: Int? = 5
    let b: Int? = 3
    var sum: Int?
    
    if let unwrappedA = a, let unwrappedB = b {
        sum = unwrappedA + unwrappedB // sum == Optional(8)
    }
    // sum останется nil, если a ИЛИ b равны nil
  2. Nil-Coalescing Operator (??):

    let a: Int? = 5
    let b: Int? = nil
    let sum = (a ?? 0) + (b ?? 0) // sum == 5
    // Предоставляет значения по умолчанию на случай nil.
  3. Функциональные преобразования (map/flatMap):

    let a: Int? = 5
    let b: Int? = 3
    // flatMap используется, когда преобразование само возвращает опционал.
    let sum = a.flatMap { aValue in
        b.map { bValue in
            aValue + bValue
        }
    } // sum == Optional(8)
    // Результат — Optional<Int>. Будет nil, если любой из операндов — nil.

Рекомендация: Выбор метода зависит от требуемого поведения при nil. Для явной и безопасной обработки используйте optional binding. Для задания значений по умолчанию — оператор ??.