Вызов Array.reduce(_:_) из перечисляемого массива

Обычный reduce вызов:

[1,2,3].reduce(0, { cur, val in
  return val
})

Попытка позвонить reduce из EnumeratedSequence<Array<Element>>:

    [1,2,3].enumerated().reduce(0, { cur, (index, element) in
      return element
    })
  // Error: consecutive statements on a line must be separated by ';'" (at initial reduce closure)

person RobertJoseph    schedule 03.04.2017    source источник
comment
См. bugs.swift.org/browse/SR-1620.   -  person Martin R    schedule 03.04.2017


Ответы (1)


Вы можете получить доступ к element кортежа с помощью val.element и index с помощью val.offset:

let result = [1,2,3].enumerated().reduce(0, { cur, val in
    return val.element
})

Кроме того, вы можете использовать присваивание для доступа к значениям в кортеже:

let result = [1,2,3].enumerated().reduce(0, { cur, val in
    let (index, element) = val
    return element
})
person vacawama    schedule 03.04.2017
comment
Это небольшое ограничение для Swift: вы не можете расширять кортежи в списке параметров закрытия, что является основной проблемой с кодом в соответствии с вопросом. - person JeremyP; 03.04.2017