【Swift入門】プロトコルでプロパティやメソッドを使ってみる

2021年1月21日

プロトコルとは構造体やクラスの実装を保証するものです。

プロトコルで定義したプロパティやメソッドは、必ず実装しなければなりません。

実装しないとエラーが出ます。

プロトコルは、

protocol プロトコル名 {
    var プロパティ名: 型 { get }
    func メソッド名()
}

と記述します。

プロトコルの定義時はプロパティやメソッドの中身は書かず、構造体などの中で実装するのがポイントです。

プロパティの横に『{ get } 』と記述することで、実装した時にプロパティを定数(let)にすることができます。

『{get set}』とした場合は変数にしかすることができません。

プロトコルを構造体に適応させるときは、

struct 構造体名: プロトコル名 {    var プロトコルで定義したプロパティ: 型
    func プロトコルで定義したメソッド(){        処理内容    }   }

といったように『: プロトコル名』と記述します。

プロトコルは複数適応させることもできます。

その場合は『 , 』で区切って、書き連ねます。

それでは、実際にプロトコルを使ってみましょう。

新しくPlaygroundを作って、空にしておいてください。

プロトコルの基本

今回は動物を表すAnimalというプロトコルを作りましょう。

そのプロトコルでは年齢を表すageというプロパティと、鳴き声を表すbarkというメソッドを作ります。

protocol Animal {
    var age: Int { get }
    func bark()
}

と記述しましょう。

コードについて説明していきます。

まずプロトコルを定義するときは『protocol』と記述します。

『protocol』という記述の横にはプロトコル名を記述します。

今回は動物のプロトコルを作りたいので、Animalとします。

プロトコルにはageというInt型のプロパティと

barkというメソッドを定義しています。

どちらも定義するだけで、実装はAnimalプロトコルを適応した構造体やクラスで行います。

ageプロパティの横の『{ get }』は、プロパティを読み取り専用にするもので、実装する時にageを定数にできます。

プロトコルを構造体に適応させる

プロトコルを作ったら構造体に適応させてみましょう。

今回は『Dog』という犬の構造体を作って、Animalプロトコルを適応させてみようと思います。

まずは空の『Dog』という名前の構造体を作りましょう。

struct Dog {
   
}

と記述してください。

次に、作ったDogという構造体にAnimalプロトコルを適応させましょう。

struct Dog: Animal {
   
}

と記述します。

Animalプロトコルを適応させると、Animalプロトコルのageプロパティとbarkメソッドが、

Dog構造体に実装されていないため、

エラーが出てしまいます。

なので、Animalプロトコルで定義されているageプロパティとbarkメソッドを実装しましょう。

Dog構造体に

let age: Int
    func bark() {    print(“犬が吠える”)}

と記述しましょう。

これでプロトコルで定義したものは実装することができたのでエラーが出なくなります。

このように、プロトコルを使えば実装を保証することができます。