SwiftのDelegate
とあるクラスAで定義したmethodを別のクラスBから呼び出したいときに使う
理解が雑なので、この説明が厳密に正しいのかがわかっていないmrsekut.icon
https://pg-happy.jp/swift-delegate-protocol-rikai.html https://pg-happy.jp/wp-content/uploads/2018/08/swift-delegate-kakikata-1.png
左書いた処理を、右で呼び出したい
やりたいこと
Aで定義したmethodをBの中で呼びたい
Aの中でイベントが発生したときにBに通知したい
上図なら左がAで、右がB
用意するもの
主となるclassA
呼びたいmethodが定義されているクラス
AはBDelegateを実装する
code:swift
class A {}
extension A: BDelegate {
func b() { // bを再定義する
// Bの中でb()が呼ばれたらここに書いた処理が実行される
}
}
Bのインスタンスを生成し、.delegateにselfを代入する
viewDitLoad()の中で?
code:swift
override func viewDidLoad() {
let b = B()
b.delegate = self
}
classB
Aで定義されたmethod aをBの中で呼びたい
プロパティに以下をもつ
code:swift
class B {
weak var delegate = BDelegate?
self.delegate.b()
}
Bのprotocol
「class名」+「Delegate」という名前をつけることが多い
code:swift
protocol B {
func b()
}
他の言語で応用するならどうしているか、どうするか
たんにoverrideっぽいがどうなんだろう。そもそも委譲をしらないmrsekut.icon なんでSwiftの話しか出てこない?
Swift固有のデザパタなの?
だとしたらそれはなんで?なにかの機能があるから?
Rubyにもdelegateというライブラリ?があるらしい
delegateにselfを入れるやつ、ViewControllerでviewDidLoad()に書くのはわかるが、逆の場合はどこに書くの?init()に書いたら落ちたわ
ViewControllerを別のクラスから呼び出すことは普通しないのか?
参考
実装する手順を一つずつ書かれているのでわかりやすい
わかりやすいらしいが全くわからんので、なにか前提が欠如してるmrsekut.icon