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)

このコードでは calcprintResult という 2 つの関数を定義している。calc は前の例と同じように、0 から引数の値までの合計を返す。クロージャを使っているのは printResult である。

printResult は関数と Int 値を受け取る。関数の型は (num:Int)->Int である。calc を渡して呼び出すと、内部で関数を実行して結果を表示する。

printResultcalc の結果だけを表示するものではない。Int 値を受け取り、Int 値を返す関数であれば、どの関数でも渡せる。

クロージャを使うと、処理を関数の外部に分離して渡せる。これがクロージャの大きな利点である。