UITableViewでリスト表示の学習をしていて
// テーブルの行数を返却する
func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int) -> Int {
return todoList.count
}
// テーブルの行ごとのセルを返却する
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Storyboardで指定したtodoCell識別子を利用して再利用可能なセルを取得する
let cell = tableView.dequeueReusableCell(withIdentifier: "todoCell",
for: indexPath)
// 行番号にあったtodoタイトルを取得
let myTodo = todoList[indexPath.row]
// セルのラベルにtodoのタイトルをセット
cell.textLabel?.text = myTodo.todoTitle
return cell
}
numberOfRowsInSectionとcellForRowAtの上記の2つのメソッドを移譲先のViewControllerに記述(プロトコルに準拠)するだけで
一覧表示するループ処理みたいなものがなくても、どうしてデータが一覧表示されるのか分からなかった。
(実際には上記2つはUITableViewDataSourceに準拠させているだけでUITableViewDelegateのメソッドではないが。)
下記の説明で納得がいった。
参考 https://teratail.com/questions/120393
tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) は自分で呼び出すものではなくシステム側から呼び出され、その際にシステム側から指定されたIndexPathのSection,Rowに対応するUITableViewCellを返すものです。
あ〜なるほど。
cellを順番に呼び出すのはシステム側でやるんで自分で記述するところはないんですね。
ループさせて表示させるっていうのを考えてしまっていてそれはシステム側でやってるということを考えつかなかった。
ちょくちょく、こういうブラックボックス的なところがあるので理解が進まないことがありますね。swiftって。
深く考えずに写経してこうするだけでリスト表示されるってことで学習を進めればいいのかもしれないですが
あとあと、理解してないと困ると思って調べていると時間がめっちゃかかる・・・
ひとまず、デリゲート関係はブラックボックス的な処理がかなりあるという解釈で進めようと思う。