Ошибка при использовании reduce() в Swift 2.0

Примечание. Это также относится к Swift 3.0.

Когда я пытаюсь использовать функцию reduce, я получаю сообщение об ошибке:

сокращение недоступно: вызовите метод «уменьшить ()» для последовательности

Я уже понял, как это сделать с помощью функции enumerate(), но не могу решить эту проблему. Вот строка кода, возвращающая ошибку:

var hashValue: Int {
    return reduce(blocks, 0) { $0.hashValue ^ $1.hashValue }
}

person Gary Simcox    schedule 14.06.2015    source источник


Ответы (1)


Вы исправляете это так же, как исправляли свою проблему с enumerate(). В Swift 2 сокращение было удалено как глобальная функция и добавлено как метод экземпляра для всех объектов, которые соответствуют протоколу SequenceType через расширение протокола. Использование заключается в следующем.

var hashValue: Int {
    return blocks.reduce(0) { $0.hashValue ^ $1.hashValue }
}
person Mick MacCallum    schedule 14.06.2015
comment
Большое спасибо! Я не был уверен из-за двух значений в функции reduce(). - person Gary Simcox; 14.06.2015