仕様書、プロトコル
プロトコルとは、一言で言えば仕様書です。
クラスや構造体、列挙などはしばしば設計書と言われますが、プロトコルはその設計書の仕様書と言えます。
プロトコルでは設計書内にどのようなプロパティやメソッドが入っているのを単文で記述します。そして、設計書でその具体的な処理について記述すると言うように分担しています。
プロトコルを使うメリット
仕様書であるプロトコルを使うことで、設計書であるクラス、構造体、列挙などの構成の組み立てに枠組みを用意することができます。
仕様書に従って、この設計図にはこのメソッドを書く必要があるな、、などと言うように。
コードで見てみる
クラス(設計書):Testは、プロトコル(仕様書):testProtocolに準拠する場合のコードです。
プロトコルで、プロパティを指定する際は、
- varのみ(letは使えない)
- {get}:読み取り専用か{get set}:読み取り・代入 かを指定しなければならない
の2つの注意点があります。
下のサンプルコードでは、1つを{get}
、もう1つを{get set}
としました。
protocol testProtocol{
var getProperty: String { get } //読み込み専用
var getset: String { get set } //読み込み・代入が可能
func ABC()
}
class Test: testProtocol{
var getProperty: String = "get"
var getset: String {
get {
return "getset"
}
set{
getProperty = newValue // getPropertyは"get"のまま
}
}
func ABC() {
print(getProperty)
print(getset)
}
}
let test = Test()
test.ABC()
出力
get
getset
getPropertyは{get}
で指定したので、値が変更されてませんね
最後に
プロトコルは、delegateなどにも使われています。
delegate単体で概念を理解するより、プロトコル自体の理解を深めた方がdelegateだけでなく、他の概念についても理解が深まるなあと思いました!