【Swift】クロージャについて

目次

Crosure(クロージャ)とはなにか

  • 変数をスコープ内に閉じ込めるためのデータ構造
  • 高階関数を定義することで、利用者が挙動をカスタマイズできる(データの処理部分を外に委託できる)
    • 例 : map関数、sort関数
  • C#ではDelegateがクロージャに当たる
  • 関数オブジェクトとして扱える

クロージャの基本的な記述方法

基本的な形は以下のように記述になります。

1
2
3
{ (引数名:引数の型) -> 戻り値の型 in
// 処理の実行
}

クロージャは、関数オブジェクトとして扱えるのが特徴です。

オブジェクトとして扱えるので、以下のように、変数への代入関数の引数にするなどの使い方ができるわけです。

変数への代入

1
2
3
let sum = { (a:Int, b:Int) -> Void){
return a + b
}

使用方法は、通常の関数と同じように使用できますが、関数では必要な引数名の指定が必要ありません。

1
let result = sum(5,3)

関数の引数として使用する

宣言方法

1
2
3
4
func send(data:String, handler:(responseMessage:String) -> Void){
// 処理の実行
handler()
}

使用方法

  • 直接記述

    1
    2
    3
    send(data:String, handler: { (responseMessage) in {
    print(message)
    })
  • メソッドを渡す

    1
    2
    3
    4
    5
    func printMessage(responseMessage:String)->Void{
    print(responseMessage)
    }

    send(data:"{title:テストデータ}", handler:responseMessage)

トレイリングクロージャ

関数の引数のクロージャを記述するときに、クロージャが最後の引数になっていれば以下のように省略して記述することができます。

1
2
3
sum(a:5, b:10){ (message) in {
print(message)
}

参考

Author

Daiki Iijima

Posted on

2021-07-03

Updated on

2024-04-17

Licensed under