初心者がよく詰まると言われることのメソッド......
3分で理解できるように前書きはおいておいて、早速解説を始めていきましょう。
delegateとは...
すごく簡単に、
自分の書いているクラスから、他のクラスへ処理を引き渡すこと
なんですが、このメソッドの利点として
- 呼び出し先のクラスのことを考えなくても良い
- 複数のクラスでも利用可能
の2つがあります。
実際にサンプルコードでどのように書いていくかをみていきましょう
フロー
自分が処理を書いた場所:親、処理を呼び出したい場所:子
1. 親にdelegateメソッドをセットする
ViewController.swift
class ViewController: UIViewController, hogeDelegate {
@IBOutlet hogetableView var delegateTableView: DelegateTableView!
override func viewDidLoad() {
super.viewDidLoad()
//自身にもセットする
delegateTableView.hogedelegate = self
}
func hoge() {
//code
}
// 以下略
}
注意すべき点は
- 一行目、classと同時に宣言すること
- viewDidLoad内にselfを用いて宣言すること
- Delegateファイルに記述する
ViewController.swift
protocol hogeDelegate: class {
func hoge()
}
- 子に変数を宣言する
ViewController.swift
class DelegateTableView: UITableView, UITableViewDataSource, UITableViewDelegate {
//delegateを設定
var testdelegate: testDelegate?
//〜省略〜
// MARK: - UITableViewDelegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.deselectRow(at: indexPath, animated: true)
self.testdelegate?.test()
}
}
注意すべき点は親の時と同様に
- 一行目、classと同時に宣言すること
- あとは実際に呼び出すだけ!
終わりに
非常に簡単なのがわかるかと思います。Delegateメソッドは頻繁に出て来るのでよく理解しておきましょう。