LoginSignup
35
35

More than 5 years have passed since last update.

SwiftのProtocolについての簡単な整理

Last updated at Posted at 2014-08-10

自分自身が、Swiftの基本的な言語仕様の理解が曖昧なので(Java言語仕様任せ w)protocolの復習から。
protocolとは、おそらくJavaで言うところのinterfaceである。

Protocolの実装

MyProtocol.swift
protocol MyProtocol{
    func protocolFunction01()
    func protocolFunction02()
}

Classの実装

次に、protocolを継承したclassを作ってみる。

ここでは試しにprotocolを実装したclassから、わざと1つのメソッドを欠落させてみる。
当然、protocolに宣言した全てのメソッドを定義しないとエラーになる。

スクリーンショット 2014-08-10 20.52.37.png

と言うことで、基本通り全てのメソッドを宣言する。

MySuper.swift
class MySuper:MyProtocol{
    func protocolFunction01() {

    }
    func protocolFunction02() {

    }
}

当然のようにエラーは消える。

スクリーンショット 2014-08-10 20.56.58.png

Protocol イニシャライザの宣言

次にinitイニシャライザをprotocolに定義してみる。
ここでは、特に意味は無いがStringを引数にしてみた。

MyProtocol.swift
protocol MyProtocol{
    init(str:String)
    func protocolFunction01()
    func protocolFunction02()
}

クラスMySuperでは、init(str:String)が無いために当然のようにエラーとなる。

スクリーンショット 2014-08-10 21.04.26.png

そこでprotocolで定義したinit(str:String)をクラスに定義してみた。
しかし、別のエラーが発生した。

Initializer requirement 'I' can only be satisfied by a 'required' initializer in non-final class 'X'

どうやら、requiredなイニシャライザでないとダメらしい。

スクリーンショット 2014-08-10 21.08.48.png

そこで、required修飾子を付けてみる。

スクリーンショット 2014-08-10 21.10.47.png

ポイント

ここでのポイントは、protocolで宣言されたイニシャライザinitには、required修飾子が必要なようだ。

35
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
35