Swiftでプロトコル(protocol)を利用する方法【初心者向け】

プログラミング初心者向けにSwiftでプロトコルを利用する方法について解説しています。プロトコルの利用シーンやメリットなどどんなことが出来るのか分かりやすく紹介しています。ぜひ書きながら使い方を覚えていきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Swiftでのプロトコルの使い方を解説しています。

複数人で同じプロジェクトを開発する場合に他の人も読みやすいコードを書く必要があります。より効率的に進めるためにもプロトコルの使い方を知っておくと良いでしょう。

 

なお本記事は、TechAcademyのiPhoneアプリ開発オンラインブートキャンプの内容をもとに紹介しています。

 

プロトコル (protocol) とは

1997 年に地球温暖化防止京都会議で採択された京都議定書は、英語で「Kyoto Protocol」と呼ばれますが、プロトコルは「取り決め」という意味合いがあります。

クラス (class)、構造体 (struct)、列挙型 (enum) をオブジェクトの内容を定義する「設計図」だとすると、インスタンスは、その設計図を元にしてアプリ実行中に生成されるオブジェクトになります。

そして、プロトコルは設計図 (class / struct / enum) の仕様を定めた「仕様書」と言えます。

設計図 (class / struct / enum) では、オブジェクトが所持すべきプロパティを定義し、メソッドの具体的な動作をプログラムという形で記述しますが、仕様書 (protocol) では、中身の具体的な動作を記述するのではなく、設計図で定義すべきプロパティやメソッドについて記述します。

例えば、配列 (Array) や辞書 (Dictionary) は、コレクションと呼ばれていますが、これはまさに CollectionType という仕様 (protocol) に従っています。

CollectionType のプロトコルには count や isEmpty などが宣言されていて、配列や辞書のオブジェクトで利用できることが分かります。

 

プロトコルの利用価値

仕様書 (protocol) があれば、設計図 (class / struct / enum) がなくても、どんな機能が利用できるか分かるという利点があります。

言い換えると、プロトコルの仕組みを導入することで、クラスをどのように構成していくかという大きな枠組みを用意することができるとも言えます。

 

[PR] iPhoneアプリの開発で挫折しない学習方法を動画で公開中

プロトコルの書き方

プロトコル (`protocol`) はあくまでもクラスや構造体・列挙型の枠組みなので、基本的には実装のない機能の羅列です。

protocol RandomGenerator {
  var randomValue: Int { get }
  func shuffle()
}

プロパティの宣言には var のみが指定でき、 let は指定できません。従って、定数を想定している場合でも var を使います。

また、 get や set で当該プロパティが読み込み専用か代入も可能かを指定します。定数を想定している場合、 let は使えませんが、 var で { get } と指定することで、「変更できない」という意味合いの指定をすることができます。

ここでは、簡単な説明に留めていますが、 static 宣言したり、 subscript を利用したりと、プロトコル自体にも多様な表現が用意され、詳細な仕様を記述することができます。

 

プロトコルに適合するクラス

クラス (構造体・列挙型) の名前の後に : を置き、その後に続けてプロトコルを記述することで、当該クラス (構造体・列挙型) がプロトコルの取り決めに従っていることを示します。

あるクラス (構造体・列挙型) がプロトコルの取り決めに従うことを「適合」あるいは「準拠」 (conform) といいます。

class Dice : RandomGenerator {

  var randomValue: Int {
    return _value
  }

  func shuffle() {
    _value = arc4random_uniform(6) + 1
  }

  private var _value: Int = arc4random_uniform(6) + 1
}

 

以上、プロトコルについて詳しく解説しました。

入門向けのSwift学習サイトもまとめているので、Swift習得を目指している方はご覧ください。

また、TechAcademyでは初心者でも最短4週間でオリジナルアプリが作れるiPhoneアプリ開発オンラインブートキャンプを開催しています。

期間中は現役エンジニアのメンターが毎日学習をサポートするので、独学よりも効率的に学ぶことができます。