     ///
     /// - returns: The added layout constraint
     @discardableResult
-    func addConstraint(toSelf attribute: NSLayoutAttribute, toAttribute: NSLayoutAttribute = .notAnAttribute, relatedBy: NSLayoutRelation = .equal, multiplier: CGFloat = 1, constant: CGFloat = 0, priority: UILayoutPriority = UILayoutPriorityRequired) -> NSLayoutConstraint {
+    func addConstraint(toSelf attribute: NSLayoutAttribute, toAttribute: NSLayoutAttribute = .notAnAttribute, relatedBy: NSLayoutRelation = .equal, multiplier: CGFloat = 1, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> NSLayoutConstraint {
         let toItem: UIView? = toAttribute == .notAnAttribute ? nil : self
         let constraint = NSLayoutConstraint(item: self, attribute: attribute, relatedBy: relatedBy, toItem: toItem, attribute: toAttribute, multiplier: multiplier, constant: constant)
         constraint.priority = priority

    ///
    /// - returns: The added layout constraints
    @discardableResult
    func addConstraints(alignItems items: [UIView], attribute: NSLayoutAttribute, priority: UILayoutPriority = UILayoutPriorityRequired) -> [NSLayoutConstraint] {
        guard let firstView = items.first else {
            return []
        }

    ///
    /// - returns: The added layout constraints
    @discardableResult
    func addConstraints(equallySpaced items: [UIView], axis: UILayoutConstraintAxis, leftView: UIView? = nil, rightView: UIView? = nil, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> [NSLayoutConstraint] {
        
        guard let firstView = items.first, let lastView = items.last else {
            return []
