Ответ
Наиболее идиоматичный и эффективный способ — использовать метод 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) }