generated at
SwiftのDelegate
from Swift

委譲の話
「Delegate」という機能があるわけではなく、そういうデザインパターン
とあるクラスAで定義したmethodを別のクラスBから呼び出したいときに使う
理解が雑なので、この説明が厳密に正しいのかがわかっていないmrsekut



左書いた処理を、右で呼び出したい




やりたいこと
Aで定義したmethodをBの中で呼びたい
Aの中でイベントが発生したときにBに通知したい
上図なら左がAで、右がB


用意するもの
主となるclassA
呼びたいmethodが定義されているクラス
AはBDelegateを実装する
extensionして継承するときれい
swift
class A {} extension A: BDelegate { func b() { // bを再定義する // Bの中でb()が呼ばれたらここに書いた処理が実行される } }
Bのインスタンスを生成し、 .delegate self を代入する
viewDitLoad() の中で?
swift
override func viewDidLoad() { let b = B() b.delegate = self }
classB
Aで定義されたmethod aをBの中で呼びたい
プロパティに以下をもつ
swift
class B { weak var delegate = BDelegate? self.delegate.b() }
Bのprotocol
「class名」+「Delegate」という名前をつけることが多い
swift
protocol B { func b() }




他の言語で応用するならどうしているか、どうするか
たんにoverrideっぽいがどうなんだろう。そもそも委譲をしらないmrsekut
なんでSwiftの話しか出てこない?
Swift固有のデザパタなの?
だとしたらそれはなんで?なにかの機能があるから?
Rubyにもdelegateというライブラリ?があるらしい
delegateにselfを入れるやつ、ViewControllerでviewDidLoad()に書くのはわかるが、逆の場合はどこに書くの?init()に書いたら落ちたわ
ViewControllerを別のクラスから呼び出すことは普通しないのか?


参考
実装する手順を一つずつ書かれているのでわかりやすい
わかりやすいらしいが全くわからんので、なにか前提が欠如してるmrsekut