diff --git a/SnapKit.xcodeproj/project.pbxproj b/SnapKit.xcodeproj/project.pbxproj index 5c2b383..7bdc1f9 100644 --- a/SnapKit.xcodeproj/project.pbxproj +++ b/SnapKit.xcodeproj/project.pbxproj @@ -23,7 +23,6 @@ 537DCEA91C35CE3E00B5B899 /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB35F1AC0C95C006BBC11 /* ConstraintAttributes.swift */; }; 537DCEB41C35D90A00B5B899 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 537DCE921C35CC8800B5B899 /* SnapKit.framework */; }; 537DCEBA1C35DA9700B5B899 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EECDB36A1AC0C95C006BBC11 /* Tests.swift */; }; - EE235FCF1C57936D00C08960 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE235FCE1C57936D00C08960 /* SourceLocation.swift */; }; EE4910981B19A26000A54F1F /* ViewController+SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */; }; EE4910991B19A40200A54F1F /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEBCC9D819CC627D0083B827 /* SnapKit.framework */; }; EE94F6091AC0F10A008767FF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE94F6081AC0F10A008767FF /* UIKit.framework */; }; @@ -71,7 +70,6 @@ 537DCE921C35CC8800B5B899 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 537DCE9A1C35CD4100B5B899 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.1.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 537DCEAF1C35D90A00B5B899 /* SnapKit tvOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SnapKit tvOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - EE235FCE1C57936D00C08960 /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = ""; }; EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ViewController+SnapKit.swift"; sourceTree = ""; }; EE94F6081AC0F10A008767FF /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; EE94F60A1AC0F10F008767FF /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; }; @@ -185,7 +183,6 @@ children = ( EECDB3661AC0C95C006BBC11 /* SnapKit.h */, EEFCF32E1AD926AE00A425FA /* SnapKit.swift */, - EE235FCE1C57936D00C08960 /* SourceLocation.swift */, EECDB35E1AC0C95C006BBC11 /* Constraint.swift */, EEFCF3311AD9432400A425FA /* ConstraintDescription.swift */, EECDB3611AC0C95C006BBC11 /* ConstraintMaker.swift */, @@ -496,7 +493,6 @@ EECDB3711AC0C9A6006BBC11 /* EdgeInsets.swift in Sources */, EE4910981B19A26000A54F1F /* ViewController+SnapKit.swift in Sources */, EECDB36F1AC0C9A6006BBC11 /* ConstraintMaker.swift in Sources */, - EE235FCF1C57936D00C08960 /* SourceLocation.swift in Sources */, EECDB36D1AC0C9A6006BBC11 /* ConstraintAttributes.swift in Sources */, EECDB3721AC0C9A6006BBC11 /* LayoutConstraint.swift in Sources */, EECDB36E1AC0C9A6006BBC11 /* ConstraintItem.swift in Sources */, diff --git a/Source/Constraint.swift b/Source/Constraint.swift index b3fea4b..5d57e02 100644 --- a/Source/Constraint.swift +++ b/Source/Constraint.swift @@ -58,9 +58,9 @@ public class Constraint { public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") } - internal var makerLocation: SourceLocation = SourceLocation(file: "Unknown", line: 0) + internal var makerFile: String = "Unknown" + internal var makerLine: UInt = 0 - internal(set) public var location: SourceLocation? } /** @@ -128,15 +128,15 @@ internal class ConcreteConstraint: Constraint { internal override func updatePriorityLow() -> Void { self.updatePriority(Float(250.0)) } - + internal override func install() -> [LayoutConstraint] { - return self.installOnView(updateExisting: false, location: self.makerLocation) + return self.installOnView(updateExisting: false, file: self.makerFile, line: self.makerLine) } - + internal override func uninstall() -> Void { self.uninstallFromView() } - + internal override func activate() -> Void { guard self.installInfo != nil else { self.install() @@ -153,7 +153,7 @@ internal class ConcreteConstraint: Constraint { NSLayoutConstraint.activateConstraints(layoutConstraints) } } - + internal override func deactivate() -> Void { guard self.installInfo != nil else { return @@ -195,23 +195,21 @@ internal class ConcreteConstraint: Constraint { private var installInfo: ConcreteConstraintInstallInfo? = nil - internal init(fromItem: ConstraintItem, toItem: ConstraintItem, relation: ConstraintRelation, constant: Any, multiplier: Float, priority: Float, location: SourceLocation?) { + internal init(fromItem: ConstraintItem, toItem: ConstraintItem, relation: ConstraintRelation, constant: Any, multiplier: Float, priority: Float) { self.fromItem = fromItem self.toItem = toItem self.relation = relation self.constant = constant self.multiplier = multiplier self.priority = priority - super.init() - self.location = location } - internal func installOnView(updateExisting updateExisting: Bool = false, location: SourceLocation? = nil) -> [LayoutConstraint] { + internal func installOnView(updateExisting updateExisting: Bool = false, file: String? = nil, line: UInt? = nil) -> [LayoutConstraint] { var installOnView: View? = nil if self.toItem.view != nil { installOnView = closestCommonSuperviewFromView(self.fromItem.view, toView: self.toItem.view) if installOnView == nil { - NSException(name: "Cannot Install Constraint", reason: "No common superview between views (@\(self.makerLocation.file)#\(self.makerLocation.line))", userInfo: nil).raise() + NSException(name: "Cannot Install Constraint", reason: "No common superview between views (@\(self.makerFile)#\(self.makerLine))", userInfo: nil).raise() return [] } } else { @@ -221,7 +219,7 @@ internal class ConcreteConstraint: Constraint { } else { installOnView = self.fromItem.view?.superview if installOnView == nil { - NSException(name: "Cannot Install Constraint", reason: "Missing superview (@\(self.makerLocation.file)#\(self.self.makerLocation.line))", userInfo: nil).raise() + NSException(name: "Cannot Install Constraint", reason: "Missing superview (@\(self.makerFile)#\(self.makerLine))", userInfo: nil).raise() return [] } } @@ -229,7 +227,7 @@ internal class ConcreteConstraint: Constraint { if let installedOnView = self.installInfo?.view { if installedOnView != installOnView { - NSException(name: "Cannot Install Constraint", reason: "Already installed on different view. (@\(self.makerLocation.file)#\(self.makerLocation.line))", userInfo: nil).raise() + NSException(name: "Cannot Install Constraint", reason: "Already installed on different view. (@\(self.makerFile)#\(self.makerLine))", userInfo: nil).raise() return [] } return self.installInfo?.layoutConstraints.allObjects as? [LayoutConstraint] ?? [] diff --git a/Source/ConstraintDescription.swift b/Source/ConstraintDescription.swift index 153cea7..2fc8d84 100644 --- a/Source/ConstraintDescription.swift +++ b/Source/ConstraintDescription.swift @@ -27,313 +27,189 @@ import UIKit import AppKit #endif -public protocol RelationTarget { - var constraintItem: ConstraintItem { get } -} - -public protocol FloatConvertible: RelationTarget { - var floatValue: Float { get } -} - -extension FloatConvertible { - public var constraintItem: ConstraintItem { - return ConstraintItem(object: nil, attributes: ConstraintAttributes.None) - } -} - -extension Float: FloatConvertible, RelationTarget { - public var floatValue: Float { - return self - } -} - -extension Int: FloatConvertible, RelationTarget { - public var floatValue: Float { - return Float(self) - } -} - -extension UInt: FloatConvertible, RelationTarget { - public var floatValue: Float { - return Float(self) - } -} - -extension Double: FloatConvertible, RelationTarget { - public var floatValue: Float { - return Float(self) - } -} - -extension CGFloat: FloatConvertible, RelationTarget { - public var floatValue: Float { - return Float(self) - } -} - -@available(iOS 9.0, OSX 10.11, *) -extension NSLayoutAnchor: RelationTarget { - public var constraintItem: ConstraintItem { - return ConstraintItem(object: self, attributes: ConstraintAttributes.None) - } -} - -extension CGPoint: RelationTarget { - public var constraintItem: ConstraintItem { - return ConstraintItem(object: nil, attributes: ConstraintAttributes.None) - } -} - -extension CGSize: RelationTarget { - public var constraintItem: ConstraintItem { - return ConstraintItem(object: nil, attributes: ConstraintAttributes.None) - } -} - -extension EdgeInsets: RelationTarget { - public var constraintItem: ConstraintItem { - return ConstraintItem(object: nil, attributes: ConstraintAttributes.None) - } -} - -extension View: RelationTarget { - public var constraintItem: ConstraintItem { - return ConstraintItem(object: self, attributes: ConstraintAttributes.None) - } -} - -extension ConstraintItem: RelationTarget { - public var constraintItem: ConstraintItem { - return self - } -} - /** Used to expose the final API of a `ConstraintDescription` which allows getting a constraint from it */ -public class ConstraintDescriptionFinalizable { +public protocol ConstraintDescriptionFinalizable: class { - private let backing: ConstraintDescription + var constraint: Constraint { get } - internal init(_ backing: ConstraintDescription) { - self.backing = backing - } - - public var constraint: Constraint { - return backing.constraint - } } /** Used to expose priority APIs */ -public class ConstraintDescriptionPriortizable: ConstraintDescriptionFinalizable { +public protocol ConstraintDescriptionPriortizable: ConstraintDescriptionFinalizable { - public func priority(priority: FloatConvertible) -> ConstraintDescriptionFinalizable { - return ConstraintDescriptionFinalizable(self.backing.priority(priority)) - } - - public func priorityRequired() -> ConstraintDescriptionFinalizable { - return ConstraintDescriptionFinalizable(self.backing.priorityRequired()) - } - public func priorityHigh() -> ConstraintDescriptionFinalizable { - return ConstraintDescriptionFinalizable(self.backing.priorityHigh()) - } - public func priorityMedium() -> ConstraintDescriptionFinalizable { - return ConstraintDescriptionFinalizable(self.backing.priorityMedium()) - } - public func priorityLow() -> ConstraintDescriptionFinalizable { - return ConstraintDescriptionFinalizable(self.backing.priorityLow()) - } + func priority(priority: Float) -> ConstraintDescriptionFinalizable + func priority(priority: Double) -> ConstraintDescriptionFinalizable + func priority(priority: CGFloat) -> ConstraintDescriptionFinalizable + func priority(priority: UInt) -> ConstraintDescriptionFinalizable + func priority(priority: Int) -> ConstraintDescriptionFinalizable + func priorityRequired() -> ConstraintDescriptionFinalizable + func priorityHigh() -> ConstraintDescriptionFinalizable + func priorityMedium() -> ConstraintDescriptionFinalizable + func priorityLow() -> ConstraintDescriptionFinalizable } /** Used to expose multiplier & constant APIs */ -public class ConstraintDescriptionEditable: ConstraintDescriptionPriortizable { +public protocol ConstraintDescriptionEditable: ConstraintDescriptionPriortizable { - public func multipliedBy(amount: FloatConvertible) -> ConstraintDescriptionEditable { - return ConstraintDescriptionEditable(self.backing.multipliedBy(amount)) - } + func multipliedBy(amount: Float) -> ConstraintDescriptionEditable + func multipliedBy(amount: Double) -> ConstraintDescriptionEditable + func multipliedBy(amount: CGFloat) -> ConstraintDescriptionEditable + func multipliedBy(amount: Int) -> ConstraintDescriptionEditable + func multipliedBy(amount: UInt) -> ConstraintDescriptionEditable - public func dividedBy(amount: FloatConvertible) -> ConstraintDescriptionEditable { - return self.multipliedBy(1 / amount.floatValue) - } + func dividedBy(amount: Float) -> ConstraintDescriptionEditable + func dividedBy(amount: Double) -> ConstraintDescriptionEditable + func dividedBy(amount: CGFloat) -> ConstraintDescriptionEditable + func dividedBy(amount: Int) -> ConstraintDescriptionEditable + func dividedBy(amount: UInt) -> ConstraintDescriptionEditable + + func offset(amount: Float) -> ConstraintDescriptionEditable + func offset(amount: Double) -> ConstraintDescriptionEditable + func offset(amount: CGFloat) -> ConstraintDescriptionEditable + func offset(amount: Int) -> ConstraintDescriptionEditable + func offset(amount: UInt) -> ConstraintDescriptionEditable + func offset(amount: CGPoint) -> ConstraintDescriptionEditable + func offset(amount: CGSize) -> ConstraintDescriptionEditable + func offset(amount: EdgeInsets) -> ConstraintDescriptionEditable - public func offset(amount: FloatConvertible) -> ConstraintDescriptionEditable { - return ConstraintDescriptionEditable(self.backing.offset(amount)) - } - public func offset(amount: CGPoint) -> ConstraintDescriptionEditable { - return ConstraintDescriptionEditable(self.backing.offset(amount)) - } - public func offset(amount: CGSize) -> ConstraintDescriptionEditable { - return ConstraintDescriptionEditable(self.backing.offset(amount)) - } - public func offset(amount: EdgeInsets) -> ConstraintDescriptionEditable { - return ConstraintDescriptionEditable(self.backing.offset(amount)) - } - - public func inset(amount: FloatConvertible) -> ConstraintDescriptionEditable { - return ConstraintDescriptionEditable(self.backing.inset(amount)) - } - public func inset(amount: EdgeInsets) -> ConstraintDescriptionEditable { - return ConstraintDescriptionEditable(self.backing.inset(amount)) - } + func inset(amount: Float) -> ConstraintDescriptionEditable + func inset(amount: Double) -> ConstraintDescriptionEditable + func inset(amount: CGFloat) -> ConstraintDescriptionEditable + func inset(amount: Int) -> ConstraintDescriptionEditable + func inset(amount: UInt) -> ConstraintDescriptionEditable + func inset(amount: EdgeInsets) -> ConstraintDescriptionEditable } /** Used to expose relation APIs */ -public class ConstraintDescriptionRelatable { +public protocol ConstraintDescriptionRelatable: class { + + func equalTo(other: ConstraintItem) -> ConstraintDescriptionEditable + func equalTo(other: View) -> ConstraintDescriptionEditable + @available(iOS 7.0, *) + func equalTo(other: LayoutSupport) -> ConstraintDescriptionEditable + @available(iOS 9.0, OSX 10.11, *) + func equalTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable + func equalTo(other: Float) -> ConstraintDescriptionEditable + func equalTo(other: Double) -> ConstraintDescriptionEditable + func equalTo(other: CGFloat) -> ConstraintDescriptionEditable + func equalTo(other: Int) -> ConstraintDescriptionEditable + func equalTo(other: UInt) -> ConstraintDescriptionEditable + func equalTo(other: CGSize) -> ConstraintDescriptionEditable + func equalTo(other: CGPoint) -> ConstraintDescriptionEditable + func equalTo(other: EdgeInsets) -> ConstraintDescriptionEditable + + func lessThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable + func lessThanOrEqualTo(other: View) -> ConstraintDescriptionEditable + @available(iOS 7.0, *) + func lessThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable + @available(iOS 9.0, OSX 10.11, *) + func lessThanOrEqualTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable + func lessThanOrEqualTo(other: Float) -> ConstraintDescriptionEditable + func lessThanOrEqualTo(other: Double) -> ConstraintDescriptionEditable + func lessThanOrEqualTo(other: CGFloat) -> ConstraintDescriptionEditable + func lessThanOrEqualTo(other: Int) -> ConstraintDescriptionEditable + func lessThanOrEqualTo(other: UInt) -> ConstraintDescriptionEditable + func lessThanOrEqualTo(other: CGSize) -> ConstraintDescriptionEditable + func lessThanOrEqualTo(other: CGPoint) -> ConstraintDescriptionEditable + func lessThanOrEqualTo(other: EdgeInsets) -> ConstraintDescriptionEditable + + func greaterThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable + func greaterThanOrEqualTo(other: View) -> ConstraintDescriptionEditable + @available(iOS 7.0, *) + func greaterThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable + @available(iOS 9.0, OSX 10.11, *) + func greaterThanOrEqualTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable + func greaterThanOrEqualTo(other: Float) -> ConstraintDescriptionEditable + func greaterThanOrEqualTo(other: Double) -> ConstraintDescriptionEditable + func greaterThanOrEqualTo(other: CGFloat) -> ConstraintDescriptionEditable + func greaterThanOrEqualTo(other: Int) -> ConstraintDescriptionEditable + func greaterThanOrEqualTo(other: UInt) -> ConstraintDescriptionEditable + func greaterThanOrEqualTo(other: CGSize) -> ConstraintDescriptionEditable + func greaterThanOrEqualTo(other: CGPoint) -> ConstraintDescriptionEditable + func greaterThanOrEqualTo(other: EdgeInsets) -> ConstraintDescriptionEditable - private let backing: ConstraintDescription - - init(_ backing: ConstraintDescription) { - self.backing = backing - } - - public func equalTo(other: RelationTarget, file: String = __FILE__, line: UInt = __LINE__) -> ConstraintDescriptionEditable { - let location = SourceLocation(file: file, line: line) - return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation: .Equal, location: location)) - } - public func equalTo(other: LayoutSupport, file: String = __FILE__, line: UInt = __LINE__) -> ConstraintDescriptionEditable { - let location = SourceLocation(file: file, line: line) - return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation: .Equal, location: location)) - } - - public func lessThanOrEqualTo(other: RelationTarget, file: String = __FILE__, line: UInt = __LINE__) -> ConstraintDescriptionEditable { - let location = SourceLocation(file: file, line: line) - return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation: .LessThanOrEqualTo, location: location)) - } - public func lessThanOrEqualTo(other: LayoutSupport, file: String = __FILE__, line: UInt = __LINE__) -> ConstraintDescriptionEditable { - let location = SourceLocation(file: file, line: line) - return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation: .LessThanOrEqualTo, location: location)) - } - - public func greaterThanOrEqualTo(other: RelationTarget, file: String = __FILE__, line: UInt = __LINE__) -> ConstraintDescriptionEditable { - let location = SourceLocation(file: file, line: line) - return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation: .GreaterThanOrEqualTo, location: location)) - } - public func greaterThanOrEqualTo(other: LayoutSupport, file: String = __FILE__, line: UInt = __LINE__) -> ConstraintDescriptionEditable { - let location = SourceLocation(file: file, line: line) - return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation: .GreaterThanOrEqualTo, location: location)) - } } /** Used to expose chaining APIs */ -public class ConstraintDescriptionExtendable: ConstraintDescriptionRelatable { +public protocol ConstraintDescriptionExtendable: ConstraintDescriptionRelatable { - public var left: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.left) - } - public var top: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.top) - } - public var bottom: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.bottom) - } - public var right: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.right) - } - public var leading: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.leading) - } - public var trailing: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.trailing) - } - public var width: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.width) - } - public var height: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.height) - } - public var centerX: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.centerX) - } - public var centerY: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.centerY) - } - public var baseline: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.baseline) - } + var left: ConstraintDescriptionExtendable { get } + var top: ConstraintDescriptionExtendable { get } + var bottom: ConstraintDescriptionExtendable { get } + var right: ConstraintDescriptionExtendable { get } + var leading: ConstraintDescriptionExtendable { get } + var trailing: ConstraintDescriptionExtendable { get } + var width: ConstraintDescriptionExtendable { get } + var height: ConstraintDescriptionExtendable { get } + var centerX: ConstraintDescriptionExtendable { get } + var centerY: ConstraintDescriptionExtendable { get } + var baseline: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) - public var firstBaseline: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.firstBaseline) - } + var firstBaseline: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) - public var leftMargin: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.leftMargin) - } + var leftMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) - public var rightMargin: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.rightMargin) - } + var rightMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) - public var topMargin: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.topMargin) - } + var topMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) - public var bottomMargin: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.bottomMargin) - } + var bottomMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) - public var leadingMargin: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.leadingMargin) - } + var leadingMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) - public var trailingMargin: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.trailingMargin) - } + var trailingMargin: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.centerXWithinMargins) - } + var centerXWithinMargins: ConstraintDescriptionExtendable { get } @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintDescriptionExtendable { - return ConstraintDescriptionExtendable(self.backing.centerYWithinMargins) - } + var centerYWithinMargins: ConstraintDescriptionExtendable { get } } /** Used to internally manage building constraint */ -internal class ConstraintDescription { +internal class ConstraintDescription: ConstraintDescriptionExtendable, ConstraintDescriptionEditable, ConstraintDescriptionFinalizable { - private var location: SourceLocation? = nil - - private var left: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Left) } - private var top: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Top) } - private var right: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Right) } - private var bottom: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Bottom) } - private var leading: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Leading) } - private var trailing: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Trailing) } - private var width: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Width) } - private var height: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Height) } - private var centerX: ConstraintDescription { return self.addConstraint(ConstraintAttributes.CenterX) } - private var centerY: ConstraintDescription { return self.addConstraint(ConstraintAttributes.CenterY) } - private var baseline: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Baseline) } + internal var left: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Left) } + internal var top: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Top) } + internal var right: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Right) } + internal var bottom: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Bottom) } + internal var leading: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Leading) } + internal var trailing: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Trailing) } + internal var width: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Width) } + internal var height: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Height) } + internal var centerX: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterX) } + internal var centerY: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterY) } + internal var baseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Baseline) } @available(iOS 8.0, *) - private var firstBaseline: ConstraintDescription { return self.addConstraint(ConstraintAttributes.FirstBaseline) } + internal var firstBaseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.FirstBaseline) } @available(iOS 8.0, *) - private var leftMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.LeftMargin) } + internal var leftMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.LeftMargin) } @available(iOS 8.0, *) - private var rightMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.RightMargin) } + internal var rightMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.RightMargin) } @available(iOS 8.0, *) - private var topMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.TopMargin) } + internal var topMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.TopMargin) } @available(iOS 8.0, *) - private var bottomMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.BottomMargin) } + internal var bottomMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.BottomMargin) } @available(iOS 8.0, *) - private var leadingMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.LeadingMargin) } + internal var leadingMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.LeadingMargin) } @available(iOS 8.0, *) - private var trailingMargin: ConstraintDescription { return self.addConstraint(ConstraintAttributes.TrailingMargin) } + internal var trailingMargin: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.TrailingMargin) } @available(iOS 8.0, *) - private var centerXWithinMargins: ConstraintDescription { return self.addConstraint(ConstraintAttributes.CenterXWithinMargins) } + internal var centerXWithinMargins: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterXWithinMargins) } @available(iOS 8.0, *) - private var centerYWithinMargins: ConstraintDescription { return self.addConstraint(ConstraintAttributes.CenterYWithinMargins) } + internal var centerYWithinMargins: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterYWithinMargins) } // MARK: initializer @@ -342,69 +218,259 @@ internal class ConstraintDescription { self.toItem = ConstraintItem(object: nil, attributes: ConstraintAttributes.None) } - // MARK: multiplier + // MARK: equalTo - private func multipliedBy(amount: FloatConvertible) -> ConstraintDescription { - self.multiplier = amount.floatValue - return self + internal func equalTo(other: ConstraintItem) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .Equal) + } + internal func equalTo(other: View) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .Equal) + } + @available(iOS 7.0, *) + internal func equalTo(other: LayoutSupport) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .Equal) + } + @available(iOS 9.0, OSX 10.11, *) + internal func equalTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .Equal) + } + internal func equalTo(other: Float) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .Equal) + } + internal func equalTo(other: Double) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .Equal) + } + internal func equalTo(other: CGFloat) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .Equal) + } + internal func equalTo(other: Int) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .Equal) + } + internal func equalTo(other: UInt) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .Equal) + } + internal func equalTo(other: CGSize) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .Equal) + } + internal func equalTo(other: CGPoint) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .Equal) + } + internal func equalTo(other: EdgeInsets) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .Equal) } - private func dividedBy(amount: FloatConvertible) -> ConstraintDescription { - self.multiplier = 1.0 / amount.floatValue; + // MARK: lessThanOrEqualTo + + internal func lessThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .LessThanOrEqualTo) + } + internal func lessThanOrEqualTo(other: View) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .LessThanOrEqualTo) + } + @available(iOS 7.0, *) + internal func lessThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .LessThanOrEqualTo) + } + @available(iOS 9.0, OSX 10.11, *) + internal func lessThanOrEqualTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .LessThanOrEqualTo) + } + internal func lessThanOrEqualTo(other: Float) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .LessThanOrEqualTo) + } + internal func lessThanOrEqualTo(other: Double) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .LessThanOrEqualTo) + } + internal func lessThanOrEqualTo(other: CGFloat) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .LessThanOrEqualTo) + } + internal func lessThanOrEqualTo(other: Int) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .LessThanOrEqualTo) + } + internal func lessThanOrEqualTo(other: UInt) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .LessThanOrEqualTo) + } + internal func lessThanOrEqualTo(other: CGSize) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .LessThanOrEqualTo) + } + internal func lessThanOrEqualTo(other: CGPoint) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .LessThanOrEqualTo) + } + internal func lessThanOrEqualTo(other: EdgeInsets) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .LessThanOrEqualTo) + } + + // MARK: greaterThanOrEqualTo + + internal func greaterThanOrEqualTo(other: ConstraintItem) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .GreaterThanOrEqualTo) + } + internal func greaterThanOrEqualTo(other: View) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .GreaterThanOrEqualTo) + } + @available(iOS 7.0, *) + internal func greaterThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .GreaterThanOrEqualTo) + } + @available(iOS 9.0, OSX 10.11, *) + internal func greaterThanOrEqualTo(other: NSLayoutAnchor) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .LessThanOrEqualTo) + } + internal func greaterThanOrEqualTo(other: Float) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .GreaterThanOrEqualTo) + } + internal func greaterThanOrEqualTo(other: Double) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .GreaterThanOrEqualTo) + } + internal func greaterThanOrEqualTo(other: CGFloat) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .GreaterThanOrEqualTo) + } + internal func greaterThanOrEqualTo(other: Int) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .GreaterThanOrEqualTo) + } + internal func greaterThanOrEqualTo(other: UInt) -> ConstraintDescriptionEditable { + return self.constrainTo(Float(other), relation: .GreaterThanOrEqualTo) + } + internal func greaterThanOrEqualTo(other: CGSize) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .GreaterThanOrEqualTo) + } + internal func greaterThanOrEqualTo(other: CGPoint) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .GreaterThanOrEqualTo) + } + internal func greaterThanOrEqualTo(other: EdgeInsets) -> ConstraintDescriptionEditable { + return self.constrainTo(other, relation: .GreaterThanOrEqualTo) + } + + // MARK: multiplier + + internal func multipliedBy(amount: Float) -> ConstraintDescriptionEditable { + self.multiplier = amount return self } + internal func multipliedBy(amount: Double) -> ConstraintDescriptionEditable { + return self.multipliedBy(Float(amount)) + } + internal func multipliedBy(amount: CGFloat) -> ConstraintDescriptionEditable { + return self.multipliedBy(Float(amount)) + } + internal func multipliedBy(amount: Int) -> ConstraintDescriptionEditable { + return self.multipliedBy(Float(amount)) + } + internal func multipliedBy(amount: UInt) -> ConstraintDescriptionEditable { + return self.multipliedBy(Float(amount)) + } + + internal func dividedBy(amount: Float) -> ConstraintDescriptionEditable { + self.multiplier = 1.0 / amount; + return self + } + internal func dividedBy(amount: Double) -> ConstraintDescriptionEditable { + return self.dividedBy(Float(amount)) + } + internal func dividedBy(amount: CGFloat) -> ConstraintDescriptionEditable { + return self.dividedBy(Float(amount)) + } + internal func dividedBy(amount: Int) -> ConstraintDescriptionEditable { + return self.dividedBy(Float(amount)) + } + internal func dividedBy(amount: UInt) -> ConstraintDescriptionEditable { + return self.dividedBy(Float(amount)) + } // MARK: offset - private func offset(amount: FloatConvertible) -> ConstraintDescription { - self.constant = amount.floatValue - return self - } - private func offset(amount: CGPoint) -> ConstraintDescription { + internal func offset(amount: Float) -> ConstraintDescriptionEditable { self.constant = amount return self } - private func offset(amount: CGSize) -> ConstraintDescription { + internal func offset(amount: Double) -> ConstraintDescriptionEditable { + return self.offset(Float(amount)) + } + internal func offset(amount: CGFloat) -> ConstraintDescriptionEditable { + return self.offset(Float(amount)) + } + internal func offset(amount: Int) -> ConstraintDescriptionEditable { + return self.offset(Float(amount)) + } + internal func offset(amount: UInt) -> ConstraintDescriptionEditable { + return self.offset(Float(amount)) + } + internal func offset(amount: CGPoint) -> ConstraintDescriptionEditable { self.constant = amount return self } - private func offset(amount: EdgeInsets) -> ConstraintDescription { + internal func offset(amount: CGSize) -> ConstraintDescriptionEditable { + self.constant = amount + return self + } + internal func offset(amount: EdgeInsets) -> ConstraintDescriptionEditable { self.constant = amount return self } // MARK: inset - private func inset(amount: FloatConvertible) -> ConstraintDescription { - let value = CGFloat(amount.floatValue) + internal func inset(amount: Float) -> ConstraintDescriptionEditable { + let value = CGFloat(amount) self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value) return self } - private func inset(amount: EdgeInsets) -> ConstraintDescription { + internal func inset(amount: Double) -> ConstraintDescriptionEditable { + let value = CGFloat(amount) + self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value) + return self + } + internal func inset(amount: CGFloat) -> ConstraintDescriptionEditable { + self.constant = EdgeInsets(top: amount, left: amount, bottom: -amount, right: -amount) + return self + } + internal func inset(amount: Int) -> ConstraintDescriptionEditable { + let value = CGFloat(amount) + self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value) + return self + } + internal func inset(amount: UInt) -> ConstraintDescriptionEditable { + let value = CGFloat(amount) + self.constant = EdgeInsets(top: value, left: value, bottom: -value, right: -value) + return self + } + internal func inset(amount: EdgeInsets) -> ConstraintDescriptionEditable { self.constant = EdgeInsets(top: amount.top, left: amount.left, bottom: -amount.bottom, right: -amount.right) return self } // MARK: priority - private func priority(priority: FloatConvertible) -> ConstraintDescription { - self.priority = priority.floatValue + internal func priority(priority: Float) -> ConstraintDescriptionFinalizable { + self.priority = priority return self } - private func priorityRequired() -> ConstraintDescription { + internal func priority(priority: Double) -> ConstraintDescriptionFinalizable { + return self.priority(Float(priority)) + } + internal func priority(priority: CGFloat) -> ConstraintDescriptionFinalizable { + return self.priority(Float(priority)) + } + func priority(priority: UInt) -> ConstraintDescriptionFinalizable { + return self.priority(Float(priority)) + } + internal func priority(priority: Int) -> ConstraintDescriptionFinalizable { + return self.priority(Float(priority)) + } + internal func priorityRequired() -> ConstraintDescriptionFinalizable { return self.priority(1000.0) } - private func priorityHigh() -> ConstraintDescription { + internal func priorityHigh() -> ConstraintDescriptionFinalizable { return self.priority(750.0) } - private func priorityMedium() -> ConstraintDescription { + internal func priorityMedium() -> ConstraintDescriptionFinalizable { #if os(iOS) || os(tvOS) return self.priority(500.0) #else return self.priority(501.0) #endif } - private func priorityLow() -> ConstraintDescription { + internal func priorityLow() -> ConstraintDescriptionFinalizable { return self.priority(250.0) } @@ -421,9 +487,7 @@ internal class ConstraintDescription { relation: self.relation!, constant: self.constant, multiplier: self.multiplier, - priority: self.priority, - location: self.location - ) + priority: self.priority) } return self.concreteConstraint! } @@ -475,35 +539,59 @@ internal class ConstraintDescription { return self } - private func constrainTo(other: RelationTarget, relation: ConstraintRelation, location: SourceLocation) -> ConstraintDescription { - - self.location = location - - if let constant = other as? FloatConvertible { - self.constant = constant.floatValue - } - - let item = other.constraintItem - - if item.attributes != ConstraintAttributes.None { - let toLayoutAttributes = item.attributes.layoutAttributes + private func constrainTo(other: ConstraintItem, relation: ConstraintRelation) -> ConstraintDescription { + if other.attributes != ConstraintAttributes.None { + let toLayoutAttributes = other.attributes.layoutAttributes if toLayoutAttributes.count > 1 { let fromLayoutAttributes = self.fromItem.attributes.layoutAttributes if toLayoutAttributes != fromLayoutAttributes { NSException(name: "Invalid Constraint", reason: "Cannot constrain to multiple non identical attributes", userInfo: nil).raise() return self } - item.attributes = ConstraintAttributes.None + other.attributes = ConstraintAttributes.None } } - self.toItem = item + self.toItem = other self.relation = relation return self } - @available(iOS 7.0, *) - private func constrainTo(other: LayoutSupport, relation: ConstraintRelation, location: SourceLocation) -> ConstraintDescription { - return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation, location: location) + private func constrainTo(other: View, relation: ConstraintRelation) -> ConstraintDescription { + return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation) } + @available(iOS 7.0, *) + private func constrainTo(other: LayoutSupport, relation: ConstraintRelation) -> ConstraintDescription { + return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation) + } + + @available(iOS 9.0, OSX 10.11, *) + private func constrainTo(other: NSLayoutAnchor, relation: ConstraintRelation) -> ConstraintDescription { + return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation) + } + + private func constrainTo(other: Float, relation: ConstraintRelation) -> ConstraintDescription { + self.constant = other + return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) + } + + private func constrainTo(other: Double, relation: ConstraintRelation) -> ConstraintDescription { + self.constant = other + return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) + } + + private func constrainTo(other: CGSize, relation: ConstraintRelation) -> ConstraintDescription { + self.constant = other + return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) + } + + private func constrainTo(other: CGPoint, relation: ConstraintRelation) -> ConstraintDescription { + self.constant = other + return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) + } + + private func constrainTo(other: EdgeInsets, relation: ConstraintRelation) -> ConstraintDescription { + self.constant = other + return constrainTo(ConstraintItem(object: nil, attributes: ConstraintAttributes.None), relation: relation) + } } diff --git a/Source/ConstraintMaker.swift b/Source/ConstraintMaker.swift index ec20db1..154b9dd 100644 --- a/Source/ConstraintMaker.swift +++ b/Source/ConstraintMaker.swift @@ -118,66 +118,72 @@ public class ConstraintMaker { @available(iOS 8.0, *) public var centerWithinMargins: ConstraintDescriptionExtendable { return self.makeConstraintDescription(ConstraintAttributes.CenterWithinMargins) } - internal init(view: View, location: SourceLocation) { + internal init(view: View, file: String, line: UInt) { self.view = view - self.location = location + self.file = file + self.line = line } - internal let location: SourceLocation + internal let file: String + internal let line: UInt internal let view: View internal var constraintDescriptions = [ConstraintDescription]() - internal func makeConstraintDescription(attributes: ConstraintAttributes) -> ConstraintDescriptionExtendable { + internal func makeConstraintDescription(attributes: ConstraintAttributes) -> ConstraintDescription { let item = ConstraintItem(object: self.view, attributes: attributes) let constraintDescription = ConstraintDescription(fromItem: item) self.constraintDescriptions.append(constraintDescription) - return ConstraintDescriptionExtendable(constraintDescription) + return constraintDescription } - internal class func prepareConstraints(view view: View, location: SourceLocation, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] { - let maker = ConstraintMaker(view: view, location: location) + internal class func prepareConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] { + let maker = ConstraintMaker(view: view, file: file, line: line) closure(make: maker) let constraints = maker.constraintDescriptions.map { $0.constraint } for constraint in constraints { - constraint.makerLocation = maker.location + constraint.makerFile = maker.file + constraint.makerLine = maker.line } return constraints } - internal class func makeConstraints(view view: View, location: SourceLocation, @noescape closure: (make: ConstraintMaker) -> Void) { + internal class func makeConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) { view.translatesAutoresizingMaskIntoConstraints = false - let maker = ConstraintMaker(view: view, location: location) + let maker = ConstraintMaker(view: view, file: file, line: line) closure(make: maker) let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint } for constraint in constraints { - constraint.makerLocation = maker.location + constraint.makerFile = maker.file + constraint.makerLine = maker.line constraint.installOnView(updateExisting: false) } } - internal class func remakeConstraints(view view: View, location: SourceLocation, @noescape closure: (make: ConstraintMaker) -> Void) { + internal class func remakeConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) { view.translatesAutoresizingMaskIntoConstraints = false - let maker = ConstraintMaker(view: view, location: location) + let maker = ConstraintMaker(view: view, file: file, line: line) closure(make: maker) self.removeConstraints(view: view) let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint } for constraint in constraints { - constraint.makerLocation = maker.location + constraint.makerFile = maker.file + constraint.makerLine = maker.line constraint.installOnView(updateExisting: false) } } - internal class func updateConstraints(view view: View, location: SourceLocation, @noescape closure: (make: ConstraintMaker) -> Void) { + internal class func updateConstraints(view view: View, file: String = "Unknown", line: UInt = 0, @noescape closure: (make: ConstraintMaker) -> Void) { view.translatesAutoresizingMaskIntoConstraints = false - let maker = ConstraintMaker(view: view, location: location) + let maker = ConstraintMaker(view: view, file: file, line: line) closure(make: maker) let constraints = maker.constraintDescriptions.map { $0.constraint as! ConcreteConstraint} for constraint in constraints { - constraint.makerLocation = maker.location + constraint.makerFile = maker.file + constraint.makerLine = maker.line constraint.installOnView(updateExisting: true) } } diff --git a/Source/Debugging.swift b/Source/Debugging.swift index 75e3acf..302012a 100644 --- a/Source/Debugging.swift +++ b/Source/Debugging.swift @@ -101,11 +101,11 @@ public extension LayoutConstraint { } internal var snp_makerFile: String? { - return self.snp_constraint?.makerLocation.file + return self.snp_constraint?.makerFile } internal var snp_makerLine: UInt? { - return self.snp_constraint?.makerLocation.line + return self.snp_constraint?.makerLine } } diff --git a/Source/LayoutConstraint.swift b/Source/LayoutConstraint.swift index 87aaad9..14ec1ed 100644 --- a/Source/LayoutConstraint.swift +++ b/Source/LayoutConstraint.swift @@ -34,9 +34,6 @@ public class LayoutConstraint: NSLayoutConstraint { internal var snp_constraint: Constraint? = nil - public var snp_location: SourceLocation? { - return snp_constraint?.location - } } internal func ==(left: LayoutConstraint, right: LayoutConstraint) -> Bool { diff --git a/Source/SourceLocation.swift b/Source/SourceLocation.swift deleted file mode 100644 index 2d87c9f..0000000 --- a/Source/SourceLocation.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - - -public struct SourceLocation { - - public let file: String - public let line: UInt - - init(file: String, line: UInt) { - self.file = file - self.line = line - } - -} diff --git a/Source/View+SnapKit.swift b/Source/View+SnapKit.swift index 6b2cd51..8672b81 100644 --- a/Source/View+SnapKit.swift +++ b/Source/View+SnapKit.swift @@ -128,7 +128,7 @@ public extension View { :returns: the constraints made */ public func snp_prepareConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] { - return ConstraintMaker.prepareConstraints(view: self, location: SourceLocation(file: file, line: line), closure: closure) + return ConstraintMaker.prepareConstraints(view: self, file: file, line: line, closure: closure) } /** @@ -137,7 +137,7 @@ public extension View { :param: closure that will be passed the `ConstraintMaker` to make the constraints with */ public func snp_makeConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> Void { - ConstraintMaker.makeConstraints(view: self, location: SourceLocation(file: file, line: line), closure: closure) + ConstraintMaker.makeConstraints(view: self, file: file, line: line, closure: closure) } /** @@ -148,7 +148,7 @@ public extension View { :param: closure that will be passed the `ConstraintMaker` to update the constraints with */ public func snp_updateConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> Void { - ConstraintMaker.updateConstraints(view: self, location: SourceLocation(file: file, line: line), closure: closure) + ConstraintMaker.updateConstraints(view: self, file: file, line: line, closure: closure) } /** @@ -157,7 +157,7 @@ public extension View { :param: closure that will be passed the `ConstraintMaker` to remake the constraints with */ public func snp_remakeConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> Void { - ConstraintMaker.remakeConstraints(view: self, location: SourceLocation(file: file, line: line), closure: closure) + ConstraintMaker.remakeConstraints(view: self, file: file, line: line, closure: closure) } /**