delegate(Swift)とdelegate(.NET)の違い
Swiftで初めてiOSアプリを書こうとして混乱したのでメモ。
Swift歴まだ数時間なのでいい加減なことを書いている可能性が多々あります。
ポイント
- Swift(やObjective C)のdelegateは言語そのものの機能ではない
- 一種のデザインパターンとして理解すべきもの
- .NET系言語のdelegateは言語の機能であり、別のもの(だがもちろん関係はある)
Swiftのdelegate
色々ググっても、使い方ばかりでクラス図とかシーケンス図がないためスッキリ分からないなぁ思いました。
で、書いてみようかなと思ったのですが、その前にぐぐってみたら書いてる方がいらっしゃいました。
iOSの画面の基礎、デリゲート(Delegate)をマスターする
ということで、どういうデザパタなのかはこの記事を参照いただければ良いと思います。
さて、高度な使い方の話はおいておくとして、UIのイベント駆動などをどう書くかというと、
- 適当なクラスでUIに対応したプロトコル(Javaなどで言うところのインターフェースに近いもの)を適合(継承)させる。
- プロトコルを適合させたクラスで、必要に応じてプロトコルで定義された処理を実装。
- 制御したいUI部品のdelegateに、プロトコルを適合させたクラスのインスタンスを指定する。
ということで良いようです。
C#でのdelegate
C#歴はSwiftよりは少しは長いので以前から知っていたので逆に混乱してしまいました。
どんな機能なのかは例えば、
C#入門 第17回 処理を委譲するdelegate
に載っていますが、こちらもイベント処理に使われます。
ただ、これは言語の機能なので単語としては同じでも、Swift上でdelegateと読んでいるものとは違うものですね。