【Swift】クロージャーの使い方

Swift

クロージャーとは

クロージャーは、関数を変数のように扱うことができる機能であり、関数を引数として渡すことや、関数から戻り値として返すことができます。

例文

クロージャーの基本的な構文

クロージャーの基本的な構文は以下のようになります。

{ (引数) -> 戻り値の型 in
  // 処理内容
}

例えば、以下は、引数に整数を取り、2倍した値を返すクロージャーの例です。

let doubler = { (number: Int) -> Int in
  return number * 2
}

クロージャーの使用例

クロージャーを使用する例として、以下は、配列に対してクロージャーを使い、要素を2倍した配列を作成する例です。

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: () -> ()) {
  closure()
  closure()
}

runTwice {
  print("Hello")
}
// Hello
// Hello

キャプチャーとエスケープ

クロージャーは、変数を「キャプチャー」することができます。キャプチャーとは、クロージャーが作成された時点で存在していた変数を、そのクロージャー内で利用できるようにすることです。また、クロージャーを関数の引数として渡す場合、そのクロージャーが関数の実行が終了した後も実行される可能性がある場合、「エスケープ」する必要があります。

var x = 10
let closure = {
  print(x)
}

func foo(closure: () -> ()) {
  closure()
}
foo(closure: closure) // 10

この例では、クロージャーが変数xをキャプチャーしており、関数fooでエスケープしています。そのため、関数fooの実行が終了した後も、クロージャーが実行される可能性があることに注意してください。

Buy me a coffee!

Swiftアプリ開発
シェアする
sogaをフォローする
タイトルとURLをコピーしました