カテゴリ: Swift 更新日: 2025/11/01

Swiftのデリゲートパターンとは?初心者でもわかる使い方と実装方法

Swift デリゲートパターンの仕組みと実装例
Swift デリゲートパターンの仕組みと実装例

先生と生徒の会話形式で理解しよう

生徒

「先生、Swiftの“デリゲートパターン”って何ですか?難しそうな名前ですね……」

先生

「確かに名前はちょっと難しそうに聞こえるかもしれませんが、実はとても便利でよく使われる仕組みなんですよ。」

生徒

「どんなときに使うんですか?」

先生

「たとえば、“誰かに仕事を任せたいとき”に使うんです。Swiftアプリの画面同士で連絡を取りたいときなどによく使われますよ。」

生徒

「ふむふむ……具体的に見てみたいです!」

先生

「それでは、Swiftのデリゲートパターンの基本から、実装方法まで丁寧に見ていきましょう。」

1. デリゲートパターンとは?

1. デリゲートパターンとは?
1. デリゲートパターンとは?

デリゲートパターン(Delegate Pattern)は、あるオブジェクトが自分の代わりに別のオブジェクトに処理を任せる「委任」の仕組みです。「デリゲート(delegate)」とは英語で「任せる人」という意味です。

プログラミングの世界では、イベントや処理の結果を他のクラスに伝えるときによく使われます。たとえば、ボタンを押したときの動きを別のクラスに伝えたいときに使います。

SwiftのiOSアプリ開発では、UITableViewUITextFieldなど、多くの場面でこのパターンが使われています。

2. デリゲートを現実の例でイメージしよう

2. デリゲートを現実の例でイメージしよう
2. デリゲートを現実の例でイメージしよう

たとえば、あなたが学校の先生で、授業中に黒板に文字を書く必要があるとします。でも手が痛くて書けない……。そんなとき、優秀な生徒に「代わりに書いて」とお願いする。それが「デリゲート」です。

先生(元のオブジェクト)が黒板に書く処理を、生徒(デリゲート)に任せることで、役割分担ができます。プログラムでも同じで、自分で処理せずに誰かに任せるイメージです。

3. Swiftでのデリゲートの構成要素

3. Swiftでのデリゲートの構成要素
3. Swiftでのデリゲートの構成要素

Swiftでデリゲートパターンを実装するには、次の3つのステップが必要です。

  • ① プロトコル(Protocol)を定義する:どんな仕事を任せたいかを決める
  • ② デリゲートを持つクラス:任せる側
  • ③ デリゲートを受け取るクラス:実際に仕事をする側

4. 実装例:ボタンを押したらメッセージを表示する

4. 実装例:ボタンを押したらメッセージを表示する
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. 実行結果を見てみよう

5. 実行結果を見てみよう
5. 実行結果を見てみよう

ボタンがタップされました
デリゲートを受け取って、メッセージを表示しました!

このように、Buttonの内部で発生したイベントをViewController側に伝えることができました。

6. なぜデリゲートパターンが便利なのか?

6. なぜデリゲートパターンが便利なのか?
6. なぜデリゲートパターンが便利なのか?

Swiftでデリゲートパターンを使うことで、以下のようなメリットがあります。

  • クラスの責務を分けられる:一つのクラスが何でも処理するのではなく、役割を分担できます。
  • コードが読みやすくなる:処理が整理され、変更もしやすくなります。
  • 拡張性がある:あとから別のクラスに処理を任せることも簡単です。

このように、Swiftにおけるデリゲートは「連絡役」や「伝書鳩」のような働きをしてくれます。

7. デリゲートとプロトコルの関係とは?

7. デリゲートとプロトコルの関係とは?
7. デリゲートとプロトコルの関係とは?

デリゲートを使うには、Swiftの「プロトコル」という機能が欠かせません。プロトコルとは、「このメソッドを必ず持っていてね」というルールブックのようなものです。

プロトコルに従っていれば、どんなクラスでもデリゲートとして使うことができるので、とても柔軟に作れます。

8. デリゲートはどんなときに使うの?

8. デリゲートはどんなときに使うの?
8. デリゲートはどんなときに使うの?

Swiftのデリゲートパターンは、アプリ内で画面同士のやり取りをしたいときによく使われます。たとえば、以下のような場面です。

  • 画面Aから画面Bに値を渡したいとき
  • テーブルのセルがタップされたことを知らせたいとき
  • テキスト入力が終わったことを通知したいとき

iOSアプリ開発では、標準の機能の中にもデリゲートが組み込まれていることが多いので、しっかりと理解しておくと後で困りません。

カテゴリの一覧へ
新着記事
Go言語の関数でエラーハンドリングする基本的な方法
Go言語のスライス・マップ・配列をまとめて比較してみよう!初心者でもわかる使い分けの基本
Go言語の条件分岐の見やすい書き方を徹底解説!初心者でもわかるif文の使い方
Go言語とは何か?初心者向けに特徴・できること・インストール手順までやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.2
Java&Spring記事人気No2
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.3
Java&Spring記事人気No3
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlinのデータクラス(data class)とは?便利な特徴と使い方を初心者向けにやさしく解説!