 import UIKit
 
 @objc class TableViewDynamicArrayDataSource: NSObject, UITableViewDataSource {
-  var dynamic: DynamicArray<UITableViewCell>
+  unowned var dynamic: DynamicArray<UITableViewCell>
   
   init(dynamic: DynamicArray<UITableViewCell>) {
     self.dynamic = dynamic

      tableView?.dataSource = dataSource
      tableView?.reloadData()
    }
  }
}


    self.tableView = tableView
    super.init()
    
    self.insertListener = { [unowned self] i in
      self.tableView?.beginUpdates()
      self.tableView?.insertRowsAtIndexPaths(i.map { NSIndexPath(forItem: $0, inSection: 0) },
        withRowAnimation: UITableViewRowAnimation.Automatic)
      self.tableView?.endUpdates()
    }
    
    self.removeListener = { [unowned self] i, o in
      self.tableView?.beginUpdates()
      self.tableView?.deleteRowsAtIndexPaths(i.map { NSIndexPath(forItem: $0, inSection: 0) },
        withRowAnimation: UITableViewRowAnimation.Automatic)
      self.tableView?.endUpdates()
    }
    
    self.updateListener = { [unowned self] i in
      self.tableView?.beginUpdates()
      self.tableView?.reloadRowsAtIndexPaths(i.map { NSIndexPath(forItem: $0, inSection: 0) },
        withRowAnimation: UITableViewRowAnimation.Automatic)
