Swiftにおけるプロトコルの定義と準拠について、詳しく説明します。
プロトコルの概要
プロトコル(Protocol)は、クラス、構造体、列挙型が共通の機能を提供するためのインターフェースのような仕組みです。プロトコルは、プロパティやメソッドのシグネチャ(型と名前)だけを定義し、それを準拠する型が実装を提供します。
プロトコルの定義方法
プロトコルはprotocolキーワードを使って定義します。
この例では、Greetableというプロトコルが、
-
読み取り専用の
nameプロパティ(getのみ) -
引数なしで戻り値もない
greet()メソッド
の実装を求めています。
プロトコルへの準拠
型(クラス、構造体、列挙型)は、プロトコルに**準拠(conform)**することで、そのプロトコルで定義されたすべての要件を満たす必要があります。準拠はコロン(:)を使って明示します。
このPerson構造体はGreetableプロトコルに準拠しており、nameプロパティとgreet()メソッドを実装しています。
プロトコルの利用例
プロトコルを使うと、異なる型に共通の振る舞いを持たせることができ、抽象化やポリモーフィズムが可能になります。
プロトコル継承
プロトコルも他のプロトコルを継承できます。
複数のプロトコル準拠
1つの型が複数のプロトコルに同時に準拠することも可能です。
プロトコルとクラス制約(制限)
プロトコルに**クラス専用(class-only)**の制約を付けることもできます(AnyObjectを使う)。
これはクラスのみが準拠でき、構造体や列挙型は準拠できません。
まとめ
| 項目 | 説明 |
|---|---|
| プロトコル | 型に実装を要求するための仕様書(インターフェース) |
| 準拠 | 型がプロトコルの要件を満たすように実装すること |
| 使用目的 | 共通の振る舞いを強制・抽象化・再利用性向上 |
| 複数準拠 | 型は複数のプロトコルに準拠可能 |
| クラス制約 | AnyObjectを使ってクラスのみに制限可能 |
生成日:2025/05/04