mirror of https://github.com/SnapKit/SnapKit
[EXC_BAD_ACCESS] Update LayoutConstraint == operator to support iOS 10 and higher changes (#574)
* @sashabelonogov Update LayoutConstraint == operator to support iOS 10 and higher changes * Simplify return statement of the LayoutConstraint == operator
This commit is contained in:
parent
ca81e8ece0
commit
bc2b0b9332
|
@ -44,14 +44,18 @@ public class LayoutConstraint : NSLayoutConstraint {
|
|||
}
|
||||
|
||||
internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool {
|
||||
guard lhs.firstItem === rhs.firstItem &&
|
||||
lhs.secondItem === rhs.secondItem &&
|
||||
lhs.firstAttribute == rhs.firstAttribute &&
|
||||
lhs.secondAttribute == rhs.secondAttribute &&
|
||||
lhs.relation == rhs.relation &&
|
||||
lhs.priority == rhs.priority &&
|
||||
lhs.multiplier == rhs.multiplier else {
|
||||
return false
|
||||
let areLayoutAnchorsEqual: Bool
|
||||
if #available(iOS 10.0, OSXApplicationExtension 10.12, *) {
|
||||
areLayoutAnchorsEqual = lhs.firstAnchor === rhs.firstAnchor &&
|
||||
lhs.secondAnchor === rhs.secondAnchor
|
||||
} else {
|
||||
areLayoutAnchorsEqual = lhs.firstItem === rhs.firstItem &&
|
||||
lhs.secondItem === rhs.secondItem &&
|
||||
lhs.firstAttribute == rhs.firstAttribute &&
|
||||
lhs.secondAttribute == rhs.secondAttribute
|
||||
}
|
||||
return true
|
||||
return areLayoutAnchorsEqual &&
|
||||
lhs.relation == rhs.relation &&
|
||||
lhs.priority == rhs.priority &&
|
||||
lhs.multiplier == rhs.multiplier
|
||||
}
|
||||
|
|
|
@ -580,4 +580,34 @@ class SnapKitTests: XCTestCase {
|
|||
let higherPriority: ConstraintPriority = ConstraintPriority.high.advanced(by: 1)
|
||||
XCTAssertEqual(higherPriority.value, highPriority.value + 1)
|
||||
}
|
||||
|
||||
func testLayoutConstraintEqual() {
|
||||
let view1 = View()
|
||||
let view2 = View()
|
||||
let layoutConstraint1 = LayoutConstraint(item: view1,
|
||||
attribute: .top,
|
||||
relatedBy: .lessThanOrEqual,
|
||||
toItem: view2,
|
||||
attribute: .bottom,
|
||||
multiplier: 2,
|
||||
constant: 30)
|
||||
let layoutConstraint2 = LayoutConstraint(item: view1,
|
||||
attribute: .top,
|
||||
relatedBy: .lessThanOrEqual,
|
||||
toItem: view2,
|
||||
attribute: .bottom,
|
||||
multiplier: 2,
|
||||
constant: 30)
|
||||
let layoutConstraint3 = LayoutConstraint(item: view1,
|
||||
attribute: .top,
|
||||
relatedBy: .lessThanOrEqual,
|
||||
toItem: view2,
|
||||
attribute: .bottom,
|
||||
multiplier: 1,
|
||||
constant: 50)
|
||||
XCTAssertTrue(layoutConstraint1 == layoutConstraint2)
|
||||
XCTAssertFalse(layoutConstraint1 == layoutConstraint3)
|
||||
XCTAssertFalse(layoutConstraint2 == layoutConstraint3)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue