Закрытие, переданное reduce
, принимает 2 аргумента: первый - это аккумулятор, а второй - элемент из массива, который вы уменьшаете.Таким образом, вам нужно добавить значения из текущей записи к текущему итогу:
let totalDownloadsToProcess = progress.reduce(0) { $0 + $1.amountLeftToDownload + $1.amountDownloaded }
Это может быть понятнее, если вы назовете входные данные:
let totalDownloadsToProcess = progress.reduce(0) { totalSoFar, elem in totalSoFar + elem.amountLeftToDownload + elem.amountDownloaded }
Закрытие вызывается для каждогоэлемент в массиве.На каждом шаге он возвращает новое значение, которое передается как totalSoFar
при обработке следующего элемента.0
используется в качестве начального значения для totalSoFar
при обработке первого элемента.