プロトコル型に明示的なアクセスレベルを指定したい場合には、プロトコルを定義する時点で指定します。これにより、特定のアクセスコンテキスト内でのみ採用できるプロトコルを生成できるようになります。

プロトコル定義内の各要件のアクセスレベルは、自動的にプロトコルと同じアクセスレベルに設定されます。プロトコル要件を、サポートするプロトコルと異なるアクセスレベルに設定することはできません。これにより、プロトコルを採用するあらゆる型で、プロトコルのすべての要件が見えるようになります。

NOTE
public プロトコルを定義する場合、実装時にプロトコルの要件を public アクセスレベルにする必要があります。この振る舞いは、public 型定義の型のメンバが internal アクセスレベルになる他の型と異なります。

プロトコル継承

既存のプロトコルを継承する新しいプロトコルを定義する場合、新しいプロトコルを継承するプロトコルと最高で同じアクセスレベルにすることができます。例えば、internal プロトコルを継承する public プロトコルを記述することはできません。

プロトコル準拠

型自体よりも低いアクセスレベルのプロトコルに準拠することができます。例えば、別のモジュールで使用できる public 型を定義することができますが、internal プロトコルに準拠する型は、internal プロトコルを定義しているモジュール内でのみ使用することができます。

特定のプロトコルに準拠する型のコンテキストは、型のアクセスレベルとプロトコルのアクセスレベルの低いほうになります。型が public で、準拠するプロトコルが internal の場合、そのプロトコルに対する型の準拠もまた internal になります。

プロトコルに準拠する型を記述または拡張する場合、各プロトコル要件の型での実装を、そのプロトコルに対する型の準拠と最低でも同じアクセスレベルにする必要があります。例えば、public 型が internal プロトコルに準拠する場合、各プロトコル要件の型での実装を最低でも internal にする必要があります。

NOTE
Objective-C と同様に、Swift でのプロトコル準拠はグローバルであり、同じプログラム内で、異なる 2 つの手段で型をプロトコルに準拠させることはできません。

Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.