まともにアプリつーかUIKitの勉強を始めて1週間か2週間か経ち、ようやくDelegateを理解したので解説
肝となるのは、
①プロトコルで定義された何らかのイベントが実施されれば、それをトリガーとして実行するメソッドを設置でき、戻り値をプロトコルと同じクラス(厳密には
インスタンス生成されたもの)に格納できる
②実行されるメソッドは、プロトコルと同じクラス内でも、違うクラスにあってもいい。なので、ボタンが押されたりエンターが入力された、といった操作がされたクラス(ViewController等)と同一である必要はなく、ほかのクラス(例えば別の.swiftファイルだったり)にあるメソッドに処理を依頼して、戻り値を入手することもできる。
例えば、検索バーにキーワードを入れ、検索ボタンを押すと、親クラスにUISearchBarDelegateプロトコルが定義されていれば、その動作が通知となりsearchBarSearchButtonClickedメソッドが実行される。通知先をselfとし、このメソッドで検索バーに入ったキーワードをDB、APIへ送信する処理を入れておけば、同一クラス内の一連の動作とできる。
逆に、キーワードをDB,APIへ送信するメソッドを別のクラスに保管しておいても、viesDidLoad()などで通知先を別クラスに指定しておけば、そっちで処理した上でイベントがあったクラスに返してくれる。機能毎にクラスを分けておいた方が、再利用しやすいメリットもある。これが設計思想ってやつか
要は、所定のプロトコルに絡んだイベント(ボタン押すとか)が対象クラス内で発生した際、そのタイミングで別のクラスに既定のメソッド処理を依頼でき、その返り値を依頼元クラスに返すことができる ちなみに依頼せず自力で処理することもできる
分かりやすく言うと、 ニコニコスポーツバーでは、代表戦で日本が勝った瞬間、客Aが客Bにテキーラを飲ませて、吐いたゲロを渡すルールがある ちなみに自分で飲んでゲロを吐くこともできる(客Aはスポーツバーに日本が勝ったらテキーラを飲む、という決め事を押し付けた犯人で、しかもゲロをほしがる異常者である)
※
ニコニコスポーツバー 親クラス
日本が勝ったらテキーラを飲ませるルール Delegateプロトコル
客A 依頼元クラス(プロトコルに対応)
客B 依頼先クラス
ゲロ 戻り値
ゲロにまみれろよ