35
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?