iOS開発におけるデリゲート(委譲)とは何か?

デリゲート(委譲)とは何か?

デリケートとは、あるクラスAの処理を別のクラスBに任せることである。

なぜ任せるのか?自分でやればいいじゃん、と思うかもしれない。

任せる理由は、自分の中身を変えないようにしつつ、振る舞いをカスタマイズしたいからである。

例えば、iOSのUIKitには、UITableViewというテーブル表示のクラスがある。

テーブルのセルがタップされたイベントを取得して、何か独自の処理がしたいとする。

UITableView自体に、セルがタップされたイベントに対応する独自の処理を追加すると、UITableViewの汎用性が薄れてしまう。

なので、処理を別のクラスBに任せる。

UITableViewのdelegateプロパティに、処理を任せる先のクラスBを設定する。

すると、テーブルのセルがタップされた際に、イベントがクラスBに飛ぶようになるので、そこに独自の処理を書くことができる。

UITableViewを変更せずに、振る舞いをカスタマイズすることができるのだ。

デリゲート元とデリゲート先

デリゲート元

1、プロトコル(SampleDelegate)を定義する

このデリゲートを使うクラスは、このプロトコルに記載された規則に従う。

2、delegateプロパティを宣言する

このdelegateプロパティに、任せる先のクラスのインスタンス(=デリゲート先)が入ってくる。

3、必要な箇所で、delegateプロパティに対して、メッセージを送る

デリゲート先に、メッセージを送る。

デリゲート先

1、プロトコル(SampleDelegate)にのっとることを宣言する

2、デリゲート元のクラスのインスタンスを生成し、delegateプロパティに自分を設定する

デリゲート元で何かイベントが発生したとき、こちらが反応できるように準備する。

3、デリケート元のクラスで、イベントが起こったとき、こちらの関数が呼ばれる

デリケート元のクラスから、処理が任されるので、カスタマイズされた処理をすれば良い。