Swift

Swift:Delegateって謎すぎない???


Delegateってマジで謎ですよね。

使用頻度がそこそこ高いのに、理解するのが難しいです。

最近ようやくしっくりする説明を思いついたので、メモしていきます。

 

俺とDelegate

私がSwiftを勉強し始めた時に買ったiOSアプリ開発の入門書で出てきたのが最初でした。

確か、UITextFieldDelegateだったと思います。(UITableViewDelegateだったかも・・・)

textFieldShouldReturnというreturnキーを押した時に処理されるメソッドを使いたくて、

UITextFieldDelegateを格闘したことは今でも鮮明に覚えています。

今ではすっかり友達です。

 

多くの方が私と同じタイミングでdelegateと出会ったのではないでしょうか。

その頃はめちゃくそ謎でしたが、写経&写経で乗り切ったのを覚えています。

 

Delegateってそもそも何?

Delegateとは、『代理人』という意味のある言葉です。

『イベントを通知するデザインパターンの一つ』と言えます。

上記のUITextFieldの例で考えると、

UITextFieldがreturnキーをタップされたこと(イベント)を感知して、

Delegate(代理人)に指定されているViewControllerが、textFieldShouldReturnメソッドを処理する。

という流れです。

うーん、謎ですね。

もっと身近な例

お使いを例に考えてみましょう。

Parent
どっちか一人に3時ごろにお使い頼むからね!

Child1
かしこまり!

Child2
ラジャー!

/

/

/

3時ごろ

Parent
Child1!お使い行ってこい!
Child1
かしこまり!

お使いを頼む:Parent

お使いを頼まれる可能性がある:Child1, Child2

『お使いに行ってきてね♡』という頼み:Ask

実際にお使いに行った:Child1

 

実際のコードではこのようになっています。

protocol

protocol:プロトコル、議定書、手順、覚書,etc

という意味のある言葉です。

delegateでは、議定書という言葉がしっくりきます。

議定書とは、取り決めが書かれた文書です。

上の例では、『goOtsukai関数』という関数を実装することを取り決められた議定書が『Ask』です。

 

Childクラス

ChildクラスはAskプロトコルに準拠しています。

準拠しているというのは、

Askプロトコルに書かれた取り決めを守る!!!。。。ということです。

 

 

myParent.delegate = myChild1

ここで実際にお使いに行くChildを決めています。

ここで決められたchldは、Askプロトコルに準拠していなければいけません。

 

 

 

なんとなくイメージできましたか??

デリゲートの良いところは、

プロトコルを作成する際に実際の処理を書かず、

デリゲート先に任せることができる点です。

そう考えるとこの例はあまり良い例ではないかもしれません・・・


コメントを残す

*