実行環境
Xcode 12.2
Swift 5.3.1
クロージャとは
クロージャの機能は、ブロック{}で囲んだ処理を実行すると言ったもので関数ととてもよく似ています。
関数はfuncで宣言しますが、クロージャは定数や変数を宣言するときと同様にvarやletを使って宣言します。
let closure1 = { (num1:Int, num2:Int) -> Int in
return num1 + num2
}
上記がクロージャの基本的な書き方になります。
num1、num2では引数を指定し-> Intの部分では戻り値の型を宣言しています。そしてinの後に処理を記述します。しかし、クロージャは簡略化して書くこともできます。
例えば、引数や戻り値がない場合は()やVoidと記述することができます。また、(引数) -> 戻り値の型 inも省略して処理だけ書くこともできます。
// 引数と戻り値がない場合
let closure2 = { () -> Void in
print("クロージャ2")
}
closure2() // クロージャ2
// 戻り値だけがない場合
let closure3 = { (num1: Int,num2: Int) -> Void in
print(num1 * num2)
}
closure3(8, 9) // 72
// 引数と戻り値がない場合はここまで省略することもできます!
let closure4 = {
print("クロージャ4")
}
closure4() // クロージャ4
Voidではなく()と書くこともできます。
ここまででなんとなく記述の仕方と簡略ができるんだなということはわかっていただけたと思います。
func関数ではなくクロージャを使うメリットは?
クロージャを使うメリットは場合によってはfunc関数よりも見やすかったりシンプルに記述できたりする点です。特に非同期処理で良く使われます。
参考URL
開発現場で役に立つSwiftのクロージャの使い方
https://arma-search.jp/article/swift-closure#i-3
【Swift入門】クロージャの使い方をわかりやすく解説!
https://www.sejuku.net/blog/34503