Protocol「私は...」アプリケーション共同開発部のしみずです。このブログを読んでいるみなさんならSwift好きですよね?ということは、Protocolも好きですよね?では、Protocolのメソッドがどのように呼び出されるのかご存知でしょうか?今回は、Protocolに関して一度は見たことや嵌ったことがあるかもしれない事例と、その原因の考察をしてみたいと思います。protocolのmethod()が出力されています。Dispatchだからです。Swiftで利用されるディスパッチの種類ここでディスパッチについて整理します。Swiftのディスパッチは、3つに分類できます。Dispatchを駆使して実現されています。Dispatch多くのOOP言語はこの方式が利用されており、純粋なSwiftクラスでも利用されています。Table”という言い方をするようです。Protocolの必須メソッドの呼び出しも基本的にこの方式が利用されます。Dispatch言わずもがなのことですが、「Struct」と「finalがついたクラスやメソッド」などはこの方式が利用されます。Objective-Cクラス以外のextensionメソッドもこの方式になります。Protocolのディスパッチの様子では実際にProtocolの必須メソッドがどのように呼び出されているのかInstruments.appを使ってのぞいてみようと思います。このProtocolに準拠した構造体、クラスとそのサブクラスのインスタンスを用意し、最初の事例と同じように型注釈にPを指定します。これらのインスタンスに対してProtocolメソッドを読んだ結果が↓になります。protocolMethod()Protocolの定義には含まれないextensionメソッドは、最初の事例と同じようにPの実装が直接呼び出されます。defaultImplementationMethod()こちらはProtocol定義に含まれるため、Pの実装ではなくそれぞれのインスタンスの実装が呼び出されます。method()先ほどと同じくProtocol定義に含まれるため、構造体もクラスもそれぞれの実装したものが呼び出されています。overriddenMethod()こちらのメソッドは、Cで実装しSubCでオーバーライドした状態で、SubCのインスタンスから呼び出しています。C“と書かれているようにスーパークラスCの準拠を辿っていますが、最終的に”SubC.overriddenMethod()”とあるようにSubC側の実装が呼び出されていることがわかります。dynamicMethod()”Cでこのように実装しています。Dispatch”が利用されている様子が伺えます。Dispatchにする方法ありません。Dispatchにする必要があるようです。TableもABI安定化の対象となっているようです。アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。@fenrir_officialフェンリルの開発者アカウントでは、フェンリルプロダクトの最新開発情報などをつぶやいています。ページでは、最新トピックをお知らせしています。ページでは、ユーザーの方たちとのコミュニケーションや最新情報の投稿などを行なっています。