プロトコル
「プロトコル」というと、ネットワークの話でサーバーとクライアントがやり取りする取り決めのことを思い出す人も多いと思います。
HTTP プロトコル、SMTP プロトコルとか、そういうものですね。
しかし、Swift でいうところのプロトコルはそれとは違います。
C# や Java などでいうインターフェイスにあたる考え方です。
いずれにせよ、「登場人物が複数いるときの両者の取り決め」という意味では同じなんですけどね。
それでは Swift のプロトコルをみていきましょう。
プロトコルとは?
プロトコル (protocols) は、クラス、構造体、Enum に使われて、メソッドやプロパティなど、必要な処理を行なうメソッドやプロパティの要件を記述します。
あるプロトコルを満たしているとき、それは「プロトコルに従っている (conform)」といいます。
次の例では Foo という名前のプロトコルを定義して、それを Person というクラスで実装しています。
protocol Foo {
var x2 : Int { get }
func hello() -> String
}
class Person : Foo {
var x : Int
var x2 : Int {
get {
return x * 2
}
}
func hello() -> String {
return "Hello"
}
init( x : Int ){
self.x = x
}
}
var p = Person( x : 5 )
print( "p.x = \(p.x) p.x2 = \(p.x2)" )
print( p.hello() )
実行結果
p.x = 5 p.x2 = 10 Hello
Foo では x2 というプロパティと hello() というメソッドを要求しているので、Person クラスではそれらを実装しています。