カテゴリ: Swift 更新日: 2025/12/09

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

Swiftを基礎から実践レベルまで学びたい人や、 iOSアプリ開発を本格的に始めたい人には、 定番の入門+実践書がこちらです。

Swift実践入門をAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

ここまで、Swiftのデリゲートパターンについて、基本的な概念からプロトコルを用いた実装方法まで丁寧に確認してきました。デリゲートは、あるクラスが自分では処理を完結せず、別のクラスに役割を渡すための大切な仕組みであり、Swiftのアプリ開発では画面間の通信やイベント処理で頻繁に登場する重要な構造です。特に、UITableViewUITextFieldなど多くのフレームワークで使われているため、実際の開発で自然と触れることになります。デリゲートとプロトコルを正しく理解すると、コードの拡張性や再利用性が高まり、変更にも強い設計が可能になります。 さらに、デリゲートパターンはアプリ全体の責務を明確に切り分けるうえで非常に効果的であり、読みやすく整理されたコード構成を実現できます。画面遷移や値の受け渡し、イベント通知など、多くの場面に応用できる柔軟性も大きな魅力です。たとえば、ボタンイベントのような単純な処理であっても、プロトコルを使うことで今後別の画面に処理を任せたい場合にも簡単に対応できます。そのため、Swiftの初学者にとって早い段階で理解しておくと、今後のアプリ開発の幅が大きく広がるでしょう。

サンプルプログラムによる振り返り

以下は、記事で紹介した実装例をさらに見やすくしたサンプルです。デリゲートとプロトコルの役割、クラス同士の関係がよく分かるよう構成しています。


// プロトコル:役割の定義
protocol LessonDelegate {
    func didFinishLesson(message: String)
}

// 任せる側(授業管理クラス)
class LessonManager {
    var delegate: LessonDelegate?

    func startLesson() {
        print("授業を開始しました")
        delegate?.didFinishLesson(message: "授業が終わりました")
    }
}

// 任される側(通知を受け取るクラス)
class Teacher: LessonDelegate {
    func didFinishLesson(message: String) {
        print(message)
    }
}

let manager = LessonManager()
let teacher = Teacher()
manager.delegate = teacher
manager.startLesson()

このように、デリゲートは「伝える側」と「受け取る側」を適切に分離できるため、アプリの設計がより整理され、拡張がしやすくなります。Swiftの構造に自然に溶け込むデリゲートの仕組みは、アプリ開発の基盤となる考え方といえるでしょう。特に画面間通信やイベント通知が増える大規模アプリでは、デリゲートの重要性が非常に高まります。プロトコルを使った柔軟な設計を身につけることで、後から新しい処理を追加したり、別のクラスに役割を変更したりする際にもスマートに対応できるようになります。

先生と生徒の振り返り会話

生徒

「今日のデリゲートパターンの話、最初はむずかしそうだと思ったけれど、実際は“任せる仕組み”なんだと分かってすごく理解しやすかったです!」

先生

「そうですね。Swiftではよく使うので、今回学んだプロトコルとデリゲートの関係を覚えておくと、アプリ開発でとても役立ちますよ。」

生徒

「ButtonDelegateやUITableViewDelegateみたいに、いろんな名前で出てくる理由もよく分かりました。画面同士の連携にも使えるんですね。」

先生

「その通りです。イベントの通知や値の受け渡しなど、場面に応じて柔軟に活用できます。デリゲートはSwiftの開発で欠かせない考え方なので、これからも意識して使ってみると良いでしょう。」

生徒

「はい!これから作るアプリにもどんどん活用して、もっと上手にコードを書けるようになります!」

関連セミナーのご案内

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

「iPhoneアプリを作りたいけれど、Macを持っていないから諦めている」そんな方のための画期的な入門講座です。実は、プログラミングの本質を学ぶのに高価な機材は必要ありません。本講座では、Windowsパソコンを使用し、クラウド環境を活用してAppleの最新言語Swift(スウィフト)の基礎を最短距離でマスターします。

Windowsで実現する開発環境

【つくるもの】
ブラウザ上で動作する「スマート・計算ツール」や「データ判定プログラム」をゼロから作成します。変数の扱いや条件分岐など、iPhoneアプリの内部で動くロジックを自分の手で構築する感動を体験してください。

【開発環境】
ブラウザだけでSwiftが動くプロ仕様のオンラインエディタ(Replit等)を使用します。面倒な設定は一切不要。今あるWindows PCで、プロのエンジニアと同じコードを書き始められます。

この60分で得られる3つの理解

1. WindowsでのSwift実行環境の作り方

OSの壁を越え、クラウドを活用してスマートに学習を開始する「現代的な開発スタイル」を習得します。

2. Swiftの基本構造(変数・型・定数)

iPhoneアプリ特有のデータの扱い方や、Appleが推奨する「安全で美しいコード」の書き方を学びます。

3. アプリエンジニアとしてのロードマップ

将来的にiOSエンジニアとして副業・転職するために必要な準備や、Mac選びのポイントを伝授します。

※本講座は、将来的にiPhoneアプリ開発で収益化や転職を目指したい未経験者のためのエントリー講座です。マンツーマン形式により、Windows環境ならではの疑問にもその場でお答えし、あなたの理解度に合わせて進行します。

セミナー画像

Windowsで始めるiPhoneアプリ開発入門

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.7
Java&Spring記事人気No7
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説