Added beta 5 fixes

– Updated raw options type
– Added explicit nil checks
This commit is contained in:
Robert Payne 2014-08-05 13:23:13 +12:00
parent 6e68c3ae5c
commit 655ea99ff4
1 changed files with 15 additions and 12 deletions

View File

@ -31,9 +31,12 @@ import AppKit
/** /**
* ConstraintAttributes is an options set that maps to NSLayoutAttributes. * ConstraintAttributes is an options set that maps to NSLayoutAttributes.
*/ */
struct ConstraintAttributes: RawOptionSet { struct ConstraintAttributes: RawOptionSetType {
var value: UInt var value: UInt
var boolValue: Bool {
return self.value != 0
}
init(_ value: UInt) { init(_ value: UInt) {
self.value = value self.value = value
@ -84,7 +87,7 @@ struct ConstraintAttributes: RawOptionSet {
if (self & ConstraintAttributes.Width) { if (self & ConstraintAttributes.Width) {
attrs.append(.Width) attrs.append(.Width)
} }
if (self & ConstraintAttributes.Height ){ if (self & ConstraintAttributes.Height) {
attrs.append(.Height) attrs.append(.Height)
} }
if (self & ConstraintAttributes.CenterX) { if (self & ConstraintAttributes.CenterX) {
@ -99,11 +102,11 @@ struct ConstraintAttributes: RawOptionSet {
return attrs return attrs
} }
} }
@assignment func += (inout left: ConstraintAttributes, right: ConstraintAttributes) { func += (inout left: ConstraintAttributes, right: ConstraintAttributes) {
left = (left | right) left = (left | right)
} }
@assignment func -= (inout left: ConstraintAttributes, right: ConstraintAttributes) { func -= (inout left: ConstraintAttributes, right: ConstraintAttributes) {
left = ConstraintAttributes(left.toRaw() & ~right.toRaw()) left = left & ~right
} }
/** /**
@ -299,15 +302,15 @@ class Constraint {
func install() -> Array<LayoutConstraint> { func install() -> Array<LayoutConstraint> {
var installOnView: View? = nil var installOnView: View? = nil
if self.toItem.view { if self.toItem.view != nil {
installOnView = Constraint.closestCommonSuperviewFromView(self.fromItem.view, toView: self.toItem.view) installOnView = Constraint.closestCommonSuperviewFromView(self.fromItem.view, toView: self.toItem.view)
if !installOnView { if installOnView == nil {
NSException(name: "Cannot Install Constraint", reason: "No common superview between views", userInfo: nil).raise() NSException(name: "Cannot Install Constraint", reason: "No common superview between views", userInfo: nil).raise()
return [] return []
} }
} else { } else {
installOnView = self.fromItem.view?.superview installOnView = self.fromItem.view?.superview
if !installOnView { if installOnView == nil {
NSException(name: "Cannot Install Constraint", reason: "Missing superview", userInfo: nil).raise() NSException(name: "Cannot Install Constraint", reason: "Missing superview", userInfo: nil).raise()
return [] return []
} }
@ -324,7 +327,7 @@ class Constraint {
let layoutTo: View? = self.toItem.view let layoutTo: View? = self.toItem.view
// get layout relation // get layout relation
let layoutRelation: NSLayoutRelation = (self.relation) ? self.relation!.layoutRelation : .Equal let layoutRelation: NSLayoutRelation = (self.relation != nil) ? self.relation!.layoutRelation : .Equal
for layoutFromAttribute in layoutFromAttributes { for layoutFromAttribute in layoutFromAttributes {
// get layout to attribute // get layout to attribute
@ -396,7 +399,7 @@ class Constraint {
private weak var installedOnView: View? private weak var installedOnView: View?
private func addConstraint(attributes: ConstraintAttributes) -> Constraint { private func addConstraint(attributes: ConstraintAttributes) -> Constraint {
if !self.relation { if self.relation == nil {
self.fromItem.attributes += attributes self.fromItem.attributes += attributes
} }
return self return self
@ -441,9 +444,9 @@ class Constraint {
private class func closestCommonSuperviewFromView(fromView: View?, toView: View?) -> View? { private class func closestCommonSuperviewFromView(fromView: View?, toView: View?) -> View? {
var closestCommonSuperview: View? var closestCommonSuperview: View?
var secondViewSuperview: View? = toView var secondViewSuperview: View? = toView
while !closestCommonSuperview && secondViewSuperview { while closestCommonSuperview == nil && secondViewSuperview != nil {
var firstViewSuperview = fromView var firstViewSuperview = fromView
while !closestCommonSuperview && firstViewSuperview { while closestCommonSuperview == nil && firstViewSuperview != nil {
if secondViewSuperview == firstViewSuperview { if secondViewSuperview == firstViewSuperview {
closestCommonSuperview = secondViewSuperview closestCommonSuperview = secondViewSuperview
} }