SwiftのDelegate
とあるクラスAで定義したmethodを別のクラスBから呼び出したいときに使う
理解が雑なので、この説明が厳密に正しいのかがわかっていない

左書いた処理を、右で呼び出したい
やりたいこと
Aで定義したmethodをBの中で呼びたい
Aの中でイベントが発生したときにBに通知したい
上図なら左がAで、右がB
用意するもの
主となるclassA
呼びたいmethodが定義されているクラス
AはBDelegateを実装する
swiftclass A {}
extension A: BDelegate {
func b() { // bを再定義する
// Bの中でb()が呼ばれたらここに書いた処理が実行される
}
}
Bのインスタンスを生成し、 .delegate
に self
を代入する
viewDitLoad()
の中で?
swiftoverride func viewDidLoad() {
let b = B()
b.delegate = self
}
classB
Aで定義されたmethod aをBの中で呼びたい
プロパティに以下をもつ
swiftclass B {
weak var delegate = BDelegate?
self.delegate.b()
}
Bのprotocol
「class名」+「Delegate」という名前をつけることが多い
swiftprotocol B {
func b()
}
他の言語で応用するならどうしているか、どうするか
たんにoverrideっぽいがどうなんだろう。そもそも
委譲をしらない

なんでSwiftの話しか出てこない?
Swift固有のデザパタなの?
だとしたらそれはなんで?なにかの機能があるから?
Rubyにもdelegateというライブラリ?があるらしい
delegateにselfを入れるやつ、ViewControllerでviewDidLoad()に書くのはわかるが、逆の場合はどこに書くの?init()に書いたら落ちたわ
ViewControllerを別のクラスから呼び出すことは普通しないのか?
参考
実装する手順を一つずつ書かれているのでわかりやすい
わかりやすいらしいが全くわからんので、なにか前提が欠如してる
