Swiftのクロージャとは?初心者向けにやさしく解説!
生徒
「Swiftのクロージャって何ですか?プログラミング初心者なので、全くわかりません…」
先生
「大丈夫ですよ。クロージャは最初はちょっと難しく感じるかもしれませんが、使い方を知るととても便利な機能なんです。」
生徒
「どんな時に使うんですか?そして、どんな見た目なんですか?」
先生
「それでは、Swiftのクロージャについて基本からわかりやすく説明していきましょう!」
1. Swiftのクロージャとは?
Swift(スウィフト)のクロージャとは、簡単に言えば「名前のない関数(無名関数)」のことです。
通常の関数はfuncというキーワードを使って定義しますが、クロージャはその場で関数のような処理を定義して、他の変数や関数に渡すことができます。
初心者の方は、まず「処理のかたまりを変数として持ち運べるもの」と考えておくとわかりやすいです。
2. クロージャの基本的な書き方
まずは基本の形を見てみましょう。
let sayHello = {
print("こんにちは、世界!")
}
sayHello()
この例では、sayHelloという変数にクロージャを代入しています。そして、それを関数のように呼び出すことができます。
「printの処理」を箱に詰めて、それをsayHelloという名前で呼び出している、というイメージです。
3. 引数つきのクロージャ
クロージャにも関数と同じように引数を渡すことができます。
let greet = { (name: String) in
print("こんにちは、\(name)さん!")
}
greet("太郎")
(name: String) inという部分が、引数とその型を定義している部分です。「in」は、引数と実行する処理を分けるキーワードです。
4. 戻り値があるクロージャ
クロージャは戻り値を返すこともできます。次の例を見てみましょう。
let add = { (a: Int, b: Int) -> Int in
return a + b
}
let result = add(3, 5)
print(result)
(a: Int, b: Int) -> Intの部分で、引数と戻り値の型を指定しています。そしてreturnで結果を返しています。
5. クロージャの省略記法(トレイリングクロージャ)
Swiftでは、コードを簡潔に書けるように「省略記法」が使えます。
let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.map { $0 * 2 }
print(doubled)
mapという関数は、配列の各要素に対して処理を実行します。この{$0 * 2}のように、引数の名前も省略できます。$0は最初の引数を意味します。
6. クロージャはなぜ便利なの?
クロージャを使うと、ボタンを押したときの処理や、データを読み込んだ後の処理など、「あとから呼び出したい処理」を簡単に指定できます。
特にiOSアプリの開発では、クロージャを使って画面遷移や通信の完了処理を記述することが多く、使いこなせるようになると一気にコードの自由度が上がります。
7. クロージャと変数の関係(キャプチャ)
クロージャは、定義された時点の変数の値を記憶して使うことができます。これを「キャプチャ」といいます。
func makeCounter() -> () -> Int {
var count = 0
return {
count += 1
return count
}
}
let counter = makeCounter()
print(counter()) // 1
print(counter()) // 2
makeCounter関数は、クロージャを返しています。このクロージャは、countという変数を記憶していて、呼び出すたびに増えていきます。
8. クロージャはどんな時に使われている?
Swiftでは、クロージャは以下のような場面でよく使われます:
- ボタンを押したときの処理(イベント処理)
- ネットワークからデータを読み込んだ後の処理
- アニメーションの完了後の処理
- 配列やリストの並び替え(ソート)
たとえば、あるデータを取得して、それが完了した後に画面を更新する、といったような処理で非常に役立ちます。