使いどころ
配列内の要素の合計値を求めるときなどに使います(実際のプロジェクトでreduceを見かけるのはほとんどこのパターンな気がします)。
では要素内の合計値の求め方を例にreduceの処理の流れを見ていきます。
let array = [1, 2, 3, 4, 5]
let result = array.reduce(0) { $0 + $1 }
print(result) // 15
reduceでは{ }の中身の処理が要素の数だけ繰り返されます。
1周目
まず1周目ですが、$0にはreduce呼び出しの第一引数で指定した0が代入されます。一方、$1には配列の要素が順番に代入されていくので、この1周目では1が代入されます。したがって、{ }の中では0 + 1の結果である1が得られます。
2周目
1周目の結果として得られた1が、2周目の$0に代入されます。つまり2周目以降は、前回の周で得られた結果が$0に代入されることになります。そして、$1は配列の要素が順番に代入されるので、今回は配列の2つ目の要素である2が代入されます。よって、1 + 2の計算が行われ、3が得られます。
3周目
あとはこれの繰り返しになります。2周目の結果として得られた3が3周目の$0に、そして配列の要素の3番目である3が$1に代入されます。3 + 3で6が結果として得られます。
4周目
6 + 4で10になります。
5周目
10 + 5で15になります。そして、これで配列にあるすべての要素の処理が終わったので、resultには15が代入されます。
最後に
今回は例として{ }の中で足し算の処理をしましたが、他には掛け算、あるいは文字列の結合などにも使えます。いずれにしても上記の処理の流れがわかっていれば応用が効く思うのでいろいろ試してみてください。
ちなみに
僕は新しく知ったことを実際にコードで確かめたい時にはpaiza.ioをよく使っています。ちょっとしたアウトプットをするときなどに重宝しています。