自分自身が、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修飾子が必要なようだ。




