カテゴリ: Swift 更新日: 2026/01/17

Swiftのデリゲートパターンをprotocolで実装する方法!初心者向け完全ガイド

Swift デリゲートパターンをprotocolで実装する手順
Swift デリゲートパターンをprotocolで実装する手順

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

生徒

「先生、Swiftでデリゲートパターンってよく聞くんですけど、どういう仕組みなんですか?」

先生

「デリゲートパターンは、あるオブジェクトが“自分では決めきれない処理”を他のオブジェクトに任せる仕組みです。Swiftではprotocolを使ってこの仕組みを作ることができます。」

生徒

「他のオブジェクトに任せるって、どういうイメージですか?」

先生

「例えば、テレビのリモコンを考えてみましょう。ボタンを押すのはリモコンですが、実際にテレビの電源を入れる処理はテレビ本体が担当します。この“お願いする仕組み”がデリゲートパターンです。」

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

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

Swiftのデリゲートパターンは、オブジェクト間で役割を分担するための設計手法です。特にiOS開発ではよく使われます。例えば、ボタンが押されたときのイベント処理や、テーブルビューのスクロールに応じた処理など、Appleのフレームワークでも多用されています。

「デリゲート」という言葉は「委任する」という意味です。つまり、あるクラスが持っている処理の一部を、別のクラスに“委ねる”ことで柔軟な設計を可能にするのです。

2. protocolでデリゲートを定義する

2. protocolでデリゲートを定義する
2. protocolでデリゲートを定義する

デリゲートパターンを作るには、まずprotocolを定義します。これは「委任する処理の設計図」です。


protocol TaskDelegate {
    func taskDidFinish()
}

この場合、「タスクが終わったら呼んでね」という約束を定義しています。taskDidFinish()を実装するクラスが、処理を引き受ける“相手”になります。

3. デリゲートを持つクラスを作る

3. デリゲートを持つクラスを作る
3. デリゲートを持つクラスを作る

次に、デリゲートを呼び出す側のクラスを作ります。このクラスはprotocolをプロパティとして持ち、必要なタイミングで呼び出します。


class Worker {
    var delegate: TaskDelegate?
    
    func startTask() {
        print("タスクを開始します...")
        // タスク完了後にデリゲートへ通知
        delegate?.taskDidFinish()
    }
}

delegate?.taskDidFinish()のように「任せた相手がいるなら呼ぶ」という書き方をします。これにより、Workerはタスク終了後の具体的な処理を知らなくても済みます。

4. デリゲートを実装するクラスを作る

4. デリゲートを実装するクラスを作る
4. デリゲートを実装するクラスを作る

次に、実際に処理を引き受けるクラスを作ります。このクラスがprotocolを採用して、実際の処理を実装します。


class Manager: TaskDelegate {
    func taskDidFinish() {
        print("タスクが完了しました!マネージャーが処理を受け取りました。")
    }
}

このManagerは、タスクが終わったときに呼ばれる処理を担当します。つまり、Workerが「終わったよ」と伝えると、Managerが「それなら次はこれをやる」と判断できるのです。

5. 実際に動かしてみる

5. 実際に動かしてみる
5. 実際に動かしてみる

最後に、デリゲートを設定して実際に動かしてみましょう。


let worker = Worker()
let manager = Manager()

worker.delegate = manager
worker.startTask()

実行すると以下のような結果が出ます。


タスクを開始します...
タスクが完了しました!マネージャーが処理を受け取りました。

この流れで、Workerはタスクの進行に集中し、Managerは終了後の処理を担当できます。役割分担が明確になり、再利用性も高まります。

6. デリゲートパターンのメリット

6. デリゲートパターンのメリット
6. デリゲートパターンのメリット

デリゲートパターンには以下のようなメリットがあります。

  • クラス間の依存関係を減らせる
  • 役割を明確に分けられる
  • 処理を切り替えやすく、再利用しやすい

例えば、Managerの代わりに別のクラスをデリゲートに設定すれば、同じWorkerを使い回しながら、処理の中身を柔軟に変更できます。

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

Swift実践入門をAmazonで見る

※ Amazon広告リンク

7. デリゲートと日常生活の例え

7. デリゲートと日常生活の例え
7. デリゲートと日常生活の例え

初心者が理解しやすいように、デリゲートを日常生活に例えてみましょう。

例えば、あなたが宅配便を受け取るとき、自分で玄関に出られない場合、家族に「代わりに受け取って」とお願いすることがあります。このとき、あなたはWorker、家族はManager、そして「荷物を受け取る」というルールがprotocolです。家族がいれば荷物を受け取ってくれますし、いなければその処理はスキップされます。これがまさにデリゲートパターンの考え方です。

関連セミナーのご案内

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言語の依存関係管理を始めよう!go modの基本設定と導入手順
New2
Kotlin
Kotlinでコレクションをフィルタリングするfilter()の活用法!初心者向けにやさしく解説
New3
Kotlin
Kotlinの出力と入力の基本!print()とreadLine()の使い方をやさしく解説
New4
Go言語
Go言語のswitch文の使い方!複数条件分岐の基本と応用例
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Kotlinのsettings.gradleファイルを完全解説!初心者でもわかるプロジェクト設定の基本
No.2
Java&Spring記事人気No2
Go言語
Swiftの配列(Array)の使い方を完全ガイド!初心者でもわかるデータのまとめ方
No.3
Java&Spring記事人気No3
Kotlin
KotlinのRoomで複雑なクエリを使いこなす!初心者でもわかる応用テクニック
No.4
Java&Spring記事人気No4
Go言語
Go言語のgo installコマンドの役割とインストール先の仕組みを徹底解説!
No.5
Java&Spring記事人気No5
Go言語
Swiftの文字列操作を完全ガイド!初心者でもわかるStringの基本
No.6
Java&Spring記事人気No6
Swift
Swiftの高階関数map・filter・reduceを完全解説!初心者でもわかる配列操作の基本
No.7
Java&Spring記事人気No7
Go言語
Go言語のSQLインジェクション対策を完全解説!初心者でも安全なデータベース操作がわかる
No.8
Java&Spring記事人気No8
Swift
SwiftでAttributedStringとNSAttributedStringを使ったリッチテキスト表示の基本