xib で定義されてる cell の使いやすくようにする


問題点

ベタ書きでエラーが発生する可能性は十分あるんで悩ましい。

let nib = UINib(nibName: "MyCell", bundle: nil)

tableView.register(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "MyCellIdentifier")

やりたいこと

  • Embedded Framework 対応
    • bundle に入れるべき値は cell class によって変わる
  • nibNameの入れ方をスマートに

解決方法

String(describing:)

let nibName = String(describing: MyCell.self)

動的に Bundle を取得

let bundle = Bundle(for: MyCell.self)

Bundle が動的に取得できれば Cell が他の target/framework に定義されても困らない。

合併してみる

合併したらこんな感じになります

let nibName = String(describing: MyCell.self)
let bundle = Bundle(for: MyCell.self)

let nib = UINib(nibName: nibName, bundle: bundle)

よしなにヘルパーを設ける

extension UITableViewCell {
    public static var nib: UINib {
        return UINib(nibName: nibName, bundle: Bundle(for: self))
    }

    static var nibName: String {
        return String(describing: MyCell.self)
    }
}

使い方

tableView.register(MyCell.nib, forCellReuseIdentifier: "MyCellIdentifier")

この書き方にするなら、ヒューマンエラ可能性も低くになると思います。
次は cell reuse identifier の方を書こうと思います。