Swiftのデリゲートパターンとは?初心者でもわかる使い方と実装方法
生徒
「先生、Swiftの“デリゲートパターン”って何ですか?難しそうな名前ですね……」
先生
「確かに名前はちょっと難しそうに聞こえるかもしれませんが、実はとても便利でよく使われる仕組みなんですよ。」
生徒
「どんなときに使うんですか?」
先生
「たとえば、“誰かに仕事を任せたいとき”に使うんです。Swiftアプリの画面同士で連絡を取りたいときなどによく使われますよ。」
生徒
「ふむふむ……具体的に見てみたいです!」
先生
「それでは、Swiftのデリゲートパターンの基本から、実装方法まで丁寧に見ていきましょう。」
1. デリゲートパターンとは?
デリゲートパターン(Delegate Pattern)は、あるオブジェクトが自分の代わりに別のオブジェクトに処理を任せる「委任」の仕組みです。「デリゲート(delegate)」とは英語で「任せる人」という意味です。
プログラミングの世界では、イベントや処理の結果を他のクラスに伝えるときによく使われます。たとえば、ボタンを押したときの動きを別のクラスに伝えたいときに使います。
SwiftのiOSアプリ開発では、UITableViewやUITextFieldなど、多くの場面でこのパターンが使われています。
2. デリゲートを現実の例でイメージしよう
たとえば、あなたが学校の先生で、授業中に黒板に文字を書く必要があるとします。でも手が痛くて書けない……。そんなとき、優秀な生徒に「代わりに書いて」とお願いする。それが「デリゲート」です。
先生(元のオブジェクト)が黒板に書く処理を、生徒(デリゲート)に任せることで、役割分担ができます。プログラムでも同じで、自分で処理せずに誰かに任せるイメージです。
3. Swiftでのデリゲートの構成要素
Swiftでデリゲートパターンを実装するには、次の3つのステップが必要です。
- ① プロトコル(Protocol)を定義する:どんな仕事を任せたいかを決める
- ② デリゲートを持つクラス:任せる側
- ③ デリゲートを受け取るクラス:実際に仕事をする側
4. 実装例:ボタンを押したらメッセージを表示する
次のコードでは、「ボタンが押された」という出来事を、別のクラスに通知するデリゲートパターンを実装しています。
import Foundation
// ① プロトコルを定義
protocol ButtonDelegate {
func didTapButton()
}
// ② デリゲートを持つクラス(ボタン)
class Button {
var delegate: ButtonDelegate?
func tap() {
print("ボタンがタップされました")
delegate?.didTapButton()
}
}
// ③ デリゲートを受け取るクラス(画面側)
class ViewController: ButtonDelegate {
func didTapButton() {
print("デリゲートを受け取って、メッセージを表示しました!")
}
}
// 使用例
let button = Button()
let viewController = ViewController()
button.delegate = viewController
button.tap()
このコードでは、ButtonクラスがViewControllerに「ボタンが押されたよ」と伝えています。delegateプロパティを使って、処理を任せているんですね。
5. 実行結果を見てみよう
ボタンがタップされました
デリゲートを受け取って、メッセージを表示しました!
このように、Buttonの内部で発生したイベントをViewController側に伝えることができました。
6. なぜデリゲートパターンが便利なのか?
Swiftでデリゲートパターンを使うことで、以下のようなメリットがあります。
- クラスの責務を分けられる:一つのクラスが何でも処理するのではなく、役割を分担できます。
- コードが読みやすくなる:処理が整理され、変更もしやすくなります。
- 拡張性がある:あとから別のクラスに処理を任せることも簡単です。
このように、Swiftにおけるデリゲートは「連絡役」や「伝書鳩」のような働きをしてくれます。
7. デリゲートとプロトコルの関係とは?
デリゲートを使うには、Swiftの「プロトコル」という機能が欠かせません。プロトコルとは、「このメソッドを必ず持っていてね」というルールブックのようなものです。
プロトコルに従っていれば、どんなクラスでもデリゲートとして使うことができるので、とても柔軟に作れます。
8. デリゲートはどんなときに使うの?
Swiftのデリゲートパターンは、アプリ内で画面同士のやり取りをしたいときによく使われます。たとえば、以下のような場面です。
- 画面Aから画面Bに値を渡したいとき
- テーブルのセルがタップされたことを知らせたいとき
- テキスト入力が終わったことを通知したいとき
iOSアプリ開発では、標準の機能の中にもデリゲートが組み込まれていることが多いので、しっかりと理解しておくと後で困りません。