Swift 入門 | 関数リテラルとクロージャ | 関数リテラル
クロージャでは、関数を値として渡す。前の例のように、関数をあらかじめ定義して引数に指定できる。
ただし、単純な処理を 1 か所でしか使わない場合、別の関数を定義する必要はない。関数リテラルを使い、引数として関数を直接記述できる。
{ ... 処理 ... }
実際には、引数を含めて次のように書くことが多い。
{ 引数 in ... 処理 ... }
引数が複数ある場合はカンマで区切る。関数リテラルを使うと、必要な関数を事前に定義せず、その場で渡せる。
func printResult(function:(num:Int)->Int, n:Int) {
print(function(num: n))
}
printResult({n in n * 2}, n: 10)
printResult({n in
var re:Int = 0
for num in 0...n {
re += num
}
return re
}, n: 100)
この例では、前に定義した printResult 関数を呼び出している。別の calc 関数は使わず、呼び出し時に関数リテラルを直接渡している。
結果を 1 つの式で求められる場合は、関数リテラルを 1 行で書ける。複数行の処理は少し複雑になるが、考え方は同じである。
クロージャや関数リテラルは最初は難しく見えるかもしれない。関数を値として扱う仕組みだと理解し、例を変更しながら試してみよう。