前提・実現したいこと
Swift4のUItableViewを使ってリスト表示をするところ勉強をしています。
その中のデリゲートのところで分からないことがでててきたのでご教授頂ければと思います。
発生している問題・エラーメッセージ
デリゲートの実装で
override func viewDidLoad() { super.viewDidLoad() tableView.dataSource = self tableView.delegate = self }
移譲先をselfにしてViewControllerとしなくても(記述しなくても)きちんと動作するのですが
これはなぜでしょうか?
UITableViewDelegate, UITableViewDataSource プロトコルに準拠している場合
(この記述がある場合 "class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{")
tableView.dataSource = self tableView.delegate = self
のように明示的にインスタンスを渡さなくても(上記を省略しても)
移譲先が別のclassで指定が無い限りデフォルトの挙動で selfとなるのでしょうか?
移譲元のtableViewインスタンスのdelegateプロパティやdataSourceプロパティにViewControllerインスタンスが渡され
tableViewインスタンスの方の実行メソッドで実行されると解釈しているのですが
tableView.dataSource = self
tableView.delegate = self
がなくても正常に動作しているのでよく分かりません。
上記がなくてもどうして正常に動作するのかご教授頂ければと思います。よろしくお願い致します。
該当のソースコード
Swift
1import UIKit 2 3class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{ 4 5 @IBOutlet weak var tableView: UITableView! 6 7 let todoList = ["Swiftを勉強する", "PHPを勉強する", "AWSについて勉強する"] 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 } 13 14 override func didReceiveMemoryWarning() { 15 super.didReceiveMemoryWarning() 16 } 17 18 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 19 return todoList.count 20 } 21 22 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 23 24 let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "todoCell", for: indexPath) 25 cell.textLabel!.text = todo[indexPath.row] 26 return cell 27 28 } 29}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/29 02:19