Swift 入門 | 関数リテラルとクロージャ | クロージャ
関数を値として扱う基本が分かったので、Swift の中心的な機能であるクロージャを使ってみよう。
クロージャを使うと、関数を引数として別の関数に渡せる。関数は値であるため、関数自体を引数として受け取る関数も作成できる。
実際の例を見ると分かりやすい。
func calc(num:Int)->Int {
var res = 0
for n in 0...num {
res += n
}
return res
}
func printResult(function:(num:Int)->Int, n:Int) {
print(function(num: n))
}
printResult(calc, n: 123)
このコードでは calc と printResult という 2 つの関数を定義している。calc は前の例と同じように、0 から引数の値までの合計を返す。クロージャを使っているのは printResult である。
printResult は関数と Int 値を受け取る。関数の型は (num:Int)->Int である。calc を渡して呼び出すと、内部で関数を実行して結果を表示する。
printResult は calc の結果だけを表示するものではない。Int 値を受け取り、Int 値を返す関数であれば、どの関数でも渡せる。
クロージャを使うと、処理を関数の外部に分離して渡せる。これがクロージャの大きな利点である。