【iOS】プロトコル(protocol)って何ぞや

iPhoneの画像 iOS開発

iOS開発の足がかりにしようと思い、こちらの書籍を使って学習を進めています。

プロトコルに関して疑問に感じるとともに、Javaのインタフェースと似ている気がしたので調べてみました!

そもそも「プロトコル」とは

「プロトコル」という言葉は、外交で用いられている言葉です。

外交官の集まりが催されると、様々な国の人が集まります。

異なる言語や宗教によって、誤解を招くことがあります。

そのような誤解を防ぐために、汎用的な儀礼を定めています

これが「プロトコル」です。

ちなみに
外交のプロトコルでは、服装や国旗の扱い方、参加者の座る位置などを定めています!

IT業界でいう「プロトコル」とは

「さまざな通信機器間で通信を行う際のルールや手順」であると言えます。

「ネットワーク通信のプロトコル」というのがメジャーですね。

HTTPや、TCPなど、最後に「P」がつく用語は基本的にプロトコルです(例外もありますが)。

Swiftでいう「プロトコル」とは

これまでの説明で何となく掴めたと思います。

プロトコルは、ざっくりいうと「決まり事を定める」ということですね。

Swiftのプロトコルも同様で、クラスや構造体(Enum)が保持するフィールド変数、メソッドなどの決まり事を定めるものです。

Javaでいうインターフェースに相当します。

プロトコルを実際に使ってみる

下記は、例です。

プロトコルの定義

プロトコルの適合

プロトコルの使用

なぜプロトコルを使用するのか?

実装する前に、設計を行いますよね。

それを、コードで設計書をかけるようなイメージです。

空っぽの変数、空っぽのメソッドを予め定義しておき、実際に機能させるときに設計書であるプロトコルを引っぱって(適合:conform)使う。

そのようなイメージです。

こうする事で、クラスをどのように構成するか枠組みを作成することができます。

プロトコルの特徴

注意すべき点も含めて、特徴を紹介します。

  • プロパティの指定はvarのみ(letは使用できない)
    • 定数を使用することを想定していても、varを定義する
    • 「get」や「set」で該当するプロパティが読み込み専用か、代入可能か指定する
  • 定数を使用する場合、set(代入)ができない「get」のみ指定する
    • 「set」のみは指定できない!
  • 複数のプロトコルを適合できる
    • クラスは1つの親クラスしか持てない(つまり、継承できるのは1つ)が、プロトコルであれば複数の物を引き継ぐことができる
  • 構造体を使用できる
    • 通常、共通処理を1つのクラスにまとめて、それを継承してそれぞれのクラスで実装する。
      しかし、値を保持する構造体では、クラスの継承などが行えない
    • プロトコルを使用することで、継承と同等のことが行える

下記、適合するときの例です。

【補足】プロトコルとインターフェースの違い

下記の記事では、より詳しく、厳密に違いを述べていらっしゃいます。

参考

プロトコルを理解する - Qiita
プロトコルはjavaでいうところのインターフェイスに近い。 クラスの実装はどうあれプロトコルに準拠したオブジェクトは 実装しなければいけないメソッドが決定される。(オプションでなければ実装しなければならない) objective-cで...

次のオススメの記事

以下の記事では、iOSに関する基礎知識を集約しています!

随時更新しているので、ぜひ!

【iOS開発入門】Xcode、iOSで押さえておくべき基本事項
業務中に学んだ、iOS開発で必要だと思ったことをまとめてみました。
タイトルとURLをコピーしました