     }
 
     /// Convenience init for a DataSource with a single section with no headers/footers
-    convenience init(items: [Item], onReorder: ReorderBlock? = nil, onScroll: ScrollBlock? = nil) {
+    public convenience init(items: [Item], onReorder: ReorderBlock? = nil, onScroll: ScrollBlock? = nil) {
         self.init(
             sections: [Section(items: items)],
             onReorder: onReorder,

     - onReorder: Optional callback for when items are moved. You should update the order your underlying data in this callback. If this property is `nil`, reordering will be disabled for this TableView
     - onScroll: Optional callback for recieving scroll events from UIScrollViewDelegate
     */
    init(sections: [Section], onReorder: ReorderBlock? = nil, onScroll: ScrollBlock? = nil, middleware: [Middleware] = []) {
        self.sections = sections
        self.onReorder = onReorder
        self.onScroll = onScroll
        self.middleware = middleware
    }

    convenience override init() {
        self.init(items: [])
    }

    /// Convenience init for a DataSource with a single section
    convenience init(section: Section, onReorder: ReorderBlock? = nil, onScroll: ScrollBlock? = nil) {
        self.init(
            sections: [section],
            onReorder: onReorder,

            }
        }

        public init<View: UIView>(customReuseIdentifier: String? = nil, configure: @escaping (View) -> Void) {
            self.configure = { view in
                configure(view as! View)
            }
