SwiftUIでのクロージャとは
公開日: 2023-09-24 23:48:06
更新日: 2023-09-26 00:57:11
SwiftUIでのクロージャについて曖昧なところがあるのでまとめてみた。
クロージャを一言で表現するとすれば:
「名前を持たない関数のようなコードブロック」
GPT先生曰く、これだけでは言い表せないが、一言にまとめるとするとこれが適切なよう。
ロージャはSwiftの非常に強力な機能の一つで、以下にその主な特徴
名前を持たない
値キャプチャ
引数と戻り値
変数に代入可能
第一級オブジェクト
簡潔な記述
順番に簡単に説明していくと
1.名前を持たない
クロージャは基本的に名前を持たない関数です。そのため、特定の場所で一度だけ使いたいコードを簡潔に記述するのに役立つ。
let greeting = {
print("Hello, world!")
}
greeting()
2.値キャプチャ
クロージャはその定義された環境の変数や定数の値を「キャプチャ」することができます。これにより、クロージャ外の変数をクロージャ内で参照や変更することが可能です。
var number = 10
let incrementNumber = {
number += 1
}
incrementNumber()
print(number) // 11
3.引数と戻り値
関数と同様に、クロージャも引数を取ることができ、戻り値を返すことができます。
let add = { (a: Int, b: Int) -> Int in
return a + b
}
print(add(5, 3)) // 8
4.変数に代入可能
クロージャは変数や定数に代入することができ、後でその変数を使ってクロージャを呼び出すことができます。これにより、関数や動作を変数として渡すことができます。
func performOperation(_ operation: () -> Void) {
operation()
}
let sayHi = {
print("Hi!")
}
performOperation(sayHi)
5.第一級オブジェクト
Swiftにおけるクロージャは第一級オブジェクトです。これは、クロージャを変数に代入したり、関数の引数として渡したり、関数から返すことができるということを意味します。
func returnClosure() -> (() -> Void) {
return {
print("Returned from a function!")
}
}
let myClosure = returnClosure()
myClosure()
6.簡潔な記述
Swiftでは、クロージャのシンタックスを簡潔に記述するためのいくつかの短縮形が提供されています。例えば、型推論を利用して引数や戻り値の型を省略したり、単一の式から成るクロージャではreturnキーワードを省略できます。
// 型推論を使用した短縮形
let multiply = { (a: Int, b: Int) in
a * b
}
print(multiply(3, 4)) // 12
// 単一の式から成るクロージャなので`return`を省略
let square = { a in
a * a
}
print(square(5)) // 25
ざっくりまとめましたが、まだまだ奥が深い。