Как в Swift вычислить сумму всех элементов массива типа Int?

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

Ответ

Наиболее идиоматичный и эффективный способ — использовать метод reduce.

Основной метод:

let numbers = [1, 2, 3, 4]
let sum = numbers.reduce(0, +) // Результат: 10

Альтернативные варианты:

  • С явным замыканием:
    let sum = numbers.reduce(0) { partialResult, nextValue in
        return partialResult + nextValue
    }
  • Через цикл (менее предпочтительно):
    var sum = 0
    for number in numbers {
        sum += number
    }

Ключевые моменты:

  • Производительность: reduce оптимизирован и обычно работает быстрее ручного цикла.
  • Пустой массив: Для пустого массива все методы вернут начальное значение 0.
  • Переполнение: Стандартные операторы (+) вызовут краш при переполнении Int. Для безопасной обработки больших чисел используйте addingReportingOverflow.
    let (result, overflow) = numbers.reduce((0, false)) { (acc, next) in
        let (sum, didOverflow) = acc.0.addingReportingOverflow(next)
        return (sum, acc.1 || didOverflow)
    }