自分自身が、Swift
の基本的な言語仕様の理解が曖昧なので(Java言語仕様任せ w)protocol
の復習から。
protocol
とは、おそらくJava
で言うところのinterface
である。
##Protocolの実装##
protocol MyProtocol{
func protocolFunction01()
func protocolFunction02()
}
##Classの実装##
次に、protocol
を継承したclass
を作ってみる。
ここでは試しにprotocol
を実装したclass
から、わざと1つのメソッドを欠落させてみる。
当然、protocol
に宣言した全てのメソッドを定義しないとエラーになる。
と言うことで、基本通り全てのメソッドを宣言する。
class MySuper:MyProtocol{
func protocolFunction01() {
}
func protocolFunction02() {
}
}
当然のようにエラーは消える。
##Protocol イニシャライザの宣言##
次にinit
イニシャライザをprotocol
に定義してみる。
ここでは、特に意味は無いがString
を引数にしてみた。
protocol MyProtocol{
init(str:String)
func protocolFunction01()
func protocolFunction02()
}
クラスMySuper
では、init(str:String)
が無いために当然のようにエラーとなる。
そこでprotocol
で定義したinit(str:String)
をクラスに定義してみた。
しかし、別のエラーが発生した。
Initializer requirement 'I' can only be satisfied by a 'required' initializer in non-final class 'X'
どうやら、required
なイニシャライザでないとダメらしい。
そこで、required
修飾子を付けてみる。
##ポイント##
ここでのポイントは、protocol
で宣言されたイニシャライザinit
には、required
修飾子が必要なようだ。