             
             return ControlEvent(source: source)
         }
-    
     */
     public func rx_modelSelected<T>(modelType: T.Type) -> ControlEvent<T> {
         let source: Observable<T> = rx_itemSelected.flatMap { [weak self] indexPath -> Observable<T> in


        return ControlEvent(events: source)
    }
 
    /**
    Reactive wrapper for `delegate` message `tableView:commitEditingStyle:forRowAtIndexPath:`.
    */

        return ControlEvent(events: source)
    }

    /**
     Reactive wrapper for `delegate` message `tableView:didDeselectRowAtIndexPath:`.

     It can be only used when one of the `rx_itemsWith*` methods is used to bind observable sequence.

       tableView.rx_modelSelected(MyModel.self)
       .map { ...

     If custom data source is being bound, new `rx_modelSelected` wrapper needs to be written also.

       public func rx_myModelDeselected<T>() -> ControlEvent<T> {
         let source: Observable<T> = rx_itemDeselected.map { indexPath in
           let dataSource: MyDataSource = self.rx_dataSource.forwardToDelegate() as! MyDataSource

           return dataSource.modelAtIndex(indexPath.item)!
          }

         return ControlEvent(source: source)
       }
     */
    public func rx_modelDeselected<T>(modelType: T.Type) -> ControlEvent<T> {
         let source: Observable<T> = rx_itemDeselected.flatMap { [weak self] indexPath -> Observable<T> in
             guard let view = self else {
                 return Observable.empty()
             }

           return Observable.just(try view.rx_modelAtIndexPath(indexPath))
        }

        return ControlEvent(events: source)
    }

    /**
     Synchronous helper method for retrieving a model at indexPath through a reactive data source
