 
 public extension UITableView {
     
-    func b_items<T>(items: ObservableArray<T>, cellIdentifier: String, configureCell: (T, UITableViewCell) -> Void) {
+    func b_items<T, CellType: UITableViewCell>(items: ObservableArray<T>, cellIdentifier: String, configureCell: (T, CellType) -> Void) {
         let delegate = TableViewDelegate(items: items, cellIdentifier: cellIdentifier, configureCell: configureCell)
         set("delegate", value: (delegate as AnyObject))
         

}


private class TableViewDelegate<T> : NSObject, UITableViewDataSource, UITableViewDelegate {
    let items: ObservableArray<T>
    let cellIdentifier: String
    let configureCell: (T, UITableViewCell) -> Void
    
    init(items: ObservableArray<T>, cellIdentifier: String, configureCell: (T, UITableViewCell) -> Void) {
        self.items = items
        self.cellIdentifier = cellIdentifier
        self.configureCell = configureCell

    }
    
    @objc func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! CellType
        configureCell(items[indexPath.row], cell)
        return cell
    }
