ログアウト

機能を保証するプロトコル

プロトコルとは

クラスや構造体の内容(プロパティとメソッド)をあらかじめ定義しておく機能です。

使用におけるメリット・特徴として

・プロトコルにプロパティ・メソッドを書いておけば、中身の処理が書かれていなくとも、そのプロパティ・メソッドの呼び出し処理を書くことができる(※)

・Swiftの構造体は継承ができないが、プロトコルを親(スーパー)クラスの代わりに使って似たようなことができる

・プロトコルは1つのクラスに複数適合でき、プロトコルにプロトコルを継承することもできる

Appleが提供しているクラスの利用時に、このプロトコルの仕組みが必要な場合がよく見られますので、しっかりと把握しておきましょう。
※使用例として、Apple提供クラスに呼び出したいプロパティ・メソッドがあったとき、それをプロトコルで用意しています。その提供クラスを使いたいときは、そのプロトコルを処理対象のクラスに適用させ、呼び出されるプロパティ・メソッドの実装をする、といった使われ方がされています。Lecture5_03 独自クラスの値を保存できる処理で出てきます。

また、次の節 Lecture2_04 Swiftコードの書き方: エラー関連処理でもこのプロトコルが出てきますので、そちらでどのようなときに使うのかを確認してみましょう。

 

プロトコルの宣言 protocol プロトコル名 { ~定義~ }

プロトコルの中にプロパティを記載する上で、定数letは使えません。
このプロパティを実装してね、という約束事なので、値がプロパティ内で固定されるletは使えないというわけです。

また、プロパティ宣言時の{}の中に書く、読み書き可能かどうかの指定、というのは2種類書き方があります。
{ get }・・・値を取得。let でもvarでも実装可能。読み込み専用。イメージとしてletを使いたいときはこちら。
{ get set }・・・値を取得&設定。varのみ実装可能。読み書き可能。イメージとしてvarを使いたいときはこちら。{ set get }でもOK

実装時にget(値の取得), set(値の設定)の要件を満たしていれば良い、という意味となるためあまり使用上の差異はありません。迷ったら{ get set }を利用しましょう。

 

プロトコルの適用

プロトコルの適用は、クラス・構造体名の後ろに”: プロトコル名”とつけます。

上記コード例には記載がありませんが、プロトコルに定義されたもの以外のプロパティ・メソッドもコーディング可能です。

また、複数のプロパティを適用したいときは クラス名: プロトコル名, プロトコル名 という形で”,”(カンマ)で区切ります。