       NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: view.superview, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0),
       NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: view.superview, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0),
       NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: view.superview, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0)
-    ])
+      ])
 
     view.layoutIfNeeded()
 
     // If the notice has a finite duration we schedule a dismiss callback
-
-    let when = dispatch_time(DISPATCH_TIME_NOW, Int64(duration * Double(NSEC_PER_SEC)))
-    dispatch_after(when, dispatch_get_main_queue()) { [weak self] in
-      // only dismiss when we it's the same notice
-      if self?.currentNoticeView === view {
-        self?.dismissCurrentNotice()
+    if let duration = duration {
+      let when = dispatch_time(DISPATCH_TIME_NOW, Int64(duration * Double(NSEC_PER_SEC)))
+      dispatch_after(when, dispatch_get_main_queue()) { [weak self] in
+        // only dismiss when we it's the same notice
+        if self?.currentNoticeView === view {
+          self?.dismissCurrentNotice()
+        }
       }
     }
 

  /// current notice view that is presented
  private var currentNoticeView: UIView?

  public func presentView(view: UIView, duration: NSTimeInterval = 5, animated: Bool = true, completion: (() -> Void)? = nil) {

    if currentNoticeView != nil {
      pendingNoticeView = view

    case .Error:
      view.backgroundColor = UIColor(red: 0.867, green: 0.125, blue: 0.125, alpha: 1.00)
    }
    
    presentView(view, duration: duration, animated: animated, completion: completion)
  }
}
