僕は今,Swift初心者として,Apple Developing iOS https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/
のチュートリアルを進めている最中です.
この記事の主旨は,公式の説明で,今までさっぱりだったdelegateの概念を理解できたので,忘れないためにもまとめておこうというものです.
Degateとは?
辞書的な定義を紹介すると
"A delegate is an object that acts on behalf of, or in coordination with, another object. "(引用: Apple Developing iOS)
「Delegateとは,他のオブジェクトの代理,または協力してはたらくオブジェクトのことです」
なんとなく言いたいことはわかりますが,具体的なイメージが浮かびません.
ここで具体的な話をしてみます.
チュートリアルでは上のように,Text Fieldに文字を打って,食べ物の名前(Meal Name)を登録するというものを作ります.
上から順に
・Default Text がUILabel
・Enter meal name がUITextField
・Set Default Label Text がUIButton
となっていて,
UITextFieldに打ち込んだ文字がUILabelに表示され,UIButtonを押すと,表示がリセットされて"Default Text"を表示するという仕様になっています.
下に示すように,まだViewController.swift上で,UITextFieldに打ち込んだ文字をUILabelに表示するためのmethodが書かれていません.
さあどうしようか?というところで,Delegateの説明が登場します.
もっともシンプルな方法としては,打ち込むと同時に UILabelに表示させるという方法です.
TextFieldへのユーザーの入力を受け取るに必要となるのがText Field delegateです.
Delecating object(この場合のTextField)は他のオブジェクト(deledate)とのリファレンスを保持します.
そして,適切なタイミングで,Delegating objectがdelegateにメッセージを送ります.このメッセージには,その時にdelegateが実行するイベントに関する内容が書かれています.
(例えば,表示する情報を更新したり,今から起こるイベントがどのような影響を与えるかといったことです)
TextFieldの場合,
ユーザーが文字を入力している間,TextField Delegateと常にコミュニケーションをとって,重要なイベント(タイピングが止まった時)が起こると,これを察知します.
Delegateはこの情報を入力された情報をUILabelにすぐさま表示したり,削除したりというアクションに利用するのです.
まとめ
Delegateは他のオブジェクトとコミュニケーションをとって,仕事をする.
※1時間くらいでささっと書いたので,あとで見直して改善します