   }
   
 }
+
+// MARK: - NibIdentifiable
+
+/// **Mechanica**
+///
+/// Objects adopting the `NibIdentifiable` protocol are nib based and are the XIB root object.
+public protocol NibIdentifiable: class {
+  static var nibIdentifier: String { get }
+}
+
+// MARK: Default implementation
+
+public extension NibIdentifiable {
+  
+  /// By default the *nibIdentifier* is the same name as the name of the class.
+  static var nibIdentifier: String {
+    return String(describing: self)
+  }
+  
+  /// By default, use the nib which is named as the name of the class and it's located in the bundle of that class.
+  static var nib: Nib {
+    #if os(iOS) || os(tvOS)
+    return Nib(nibName: nibIdentifier, bundle: Bundle(for: self))
+    #elseif os(macOS)
+    return Nib(nibNamed: nibIdentifier, bundle: Bundle(for: self))!
+    #endif
+  }
+}
+

   }
   }
   
   let firstNib = Nib.nib(forKey: main)
   ```
   - note: If the bundle parameter is nil, the main bundle is used.
   */

  }
  
}

// MARK: - NibLoadable

/// **Mechanica**
///
