クロージャーとは
クロージャーは、関数を変数のように扱うことができる機能です。
関数を引数として渡したり、関数から戻り値として返したりすることができます。
基本的な構文
クロージャーの基本形は以下の通りです:
{ (引数) -> 戻り値の型 in
// 処理内容
}
簡単な例として、数値を2倍にするクロージャー:
let doubler = { (number: Int) -> Int in
return number * 2
}
実践的な使用例
配列の要素を変換
map
関数とクロージャーを組み合わせた例:
let numbers = [1, 2, 3, 4, 5]
let doubledNumbers = numbers.map({ (number: Int) -> Int in
return number * 2
})
print(doubledNumbers) // [2, 4, 6, 8, 10]
クロージャーを引数として使用
クロージャーを2回実行する関数の例:
func runTwice(_ closure: () -> Void) {
closure()
closure()
}
runTwice {
print("Hello")
}
// 出力:
// Hello
// Hello
キャプチャーとエスケープ
クロージャーには2つの重要な特徴があります:
- キャプチャー: クロージャーが作成された時点の変数を保持できる
- エスケープ: 関数の実行終了後もクロージャーを実行できる
例:
var x = 10
let closure = {
print(x)
}
func foo(closure: () -> Void) {
closure()
}
foo(closure: closure) // 10
このケースでは、クロージャーが変数x
をキャプチャーし、関数foo
の中で使用されています。