     /// The `String` that represents the reusable view identifier.
     static var suggestedIdentifier: String { get }
 
+    /// Returns a `CustomReusableView` loaded from the nib.
+    /// - Returns: a `CustomReusableView` loaded from the nib, or `nil` if no nib is set.
+    static func loadReusableViewFromNib() -> Self?
+
 }
+
+public extension CustomCell {
+
+    static func loadCellFromNib() -> Self? {
+        return contentNib?.instantiate(withOwner: self).first as? Self
+    }
+
+}
+
+public extension CustomHeaderFooterView {
+
+    static func loadHeaderFooterViewFromNib() -> Self? {
+        return contentNib?.instantiate(withOwner: self).first as? Self
+    }
+
+}
+
+public extension CustomReusableView {
+
+    static func loadReusableViewFromNib() -> Self? {
+        return contentNib?.instantiate(withOwner: self).first as? Self
+    }
+
+}


    /// The `String` that represents the header footer view identifier.
    static var suggestedIdentifier: String { get }

}


    /// The `String` that represents the cell identifier.
    static var suggestedIdentifier: String { get }

    /// Returns a `CustomCell` loaded from the nib.
    /// - Returns: a `CustomCell` loaded from the nib, or `nil` if no nib is set.
    static func loadCellFromNib() -> Self?

}

/// A protocol that describes a header footer view that will be customized.
