     }
 
     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = tableView.dequeueReusableCell(withIdentifier: Cell.reuseIdentifier, for: indexPath) as! Cell
+        let cell: Cell = tableView.dequeueReusableCell(for: indexPath)
         configureCell?(cell, items[indexPath.row])
 
-        return cell as! UITableViewCell
+        return cell
     }
 
     // MARK: - UITableViewDelegate

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.register(Cell.nib, forCellReuseIdentifier: Cell.reuseIdentifier)
    }

    // MARK: - UITableViewDataSource

import UIKit
import Reusable

class TableViewController<Item, Cell: UITableViewCell & NibReusable>: UITableViewController {

    var items: [Item] = [] {
        didSet {
