tableView
初期化
Swift
二次元配列

【Swift】複数のsectionがあるtableViewで二次元配列を使う。

Swift, 複数のsectionがあるtableViewで二次元配列を使ってみました。
検索しても中々出てこないので、自分の方法を公開します。
TableSample.gif
上図のように、「3年A組〜C組」の3つのsectionの中に、数名の生徒のrowがあります。二次元配列をtwoDimArrayとします。
Reuse Identifier名は"Reuse"とします。
このサンプルを使えば、sectionやrowがいくら増えても「override func numberOfSections〜」以下のコードを一文字も書き換える必要がありません。
Swiftで二次元配列を初期化する方法は色々ありますが、可読性が良い方法を以下に提案します。

import UIKit

class TableViewController: UITableViewController {

    var mySections = [String]()
    var twoDimArray = [[String]]()
    var selectedClass = ""
    var selectedPerson = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        mySections = ["3年A組","3年B組","3年C組"]

        for _ in 0 ... 2{
            twoDimArray.append([])
        }

        twoDimArray[0] = ["井上","加藤","田中"]
        twoDimArray[1] = ["鈴木","吉田"]
        twoDimArray[2] = ["遠藤","佐藤","村田","山田"]
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return mySections.count
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return twoDimArray[section].count
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return mySections[section]
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Reuse", for: indexPath)
        cell.textLabel?.text = twoDimArray[indexPath.section][indexPath.row]
        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedClass = mySections[indexPath.section]
        selectedPerson = twoDimArray[indexPath.section][indexPath.row]
    }

}