Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Binary operator '|=' cannot be applied to two 'UIAccessibilityTraits' operands

Tags:

ios

swift

I just updated to xCode 10 and instantly got this error "Binary operator '|=' cannot be applied to two 'UIAccessibilityTraits' operands" The error appears in the 4th line of code:

func setAccessibilityView() {
    self.addSubview(accessibilityView)
    accessibilityView.isAccessibilityElement = true
    accessibilityView.accessibilityTraits |= UIAccessibilityTraits.button
}
like image 750
J. Doe Avatar asked Sep 17 '18 19:09

J. Doe


2 Answers

These are not Objective-C bitmasks. accessibilityTraits is of type UIAccessibilityTraits which conforms to OptionSet which in turn conforms to SetAlgebra.

To add a value to the existing values, replace:

accessibilityView.accessibilityTraits |= UIAccessibilityTraits.button

with:

accessibilityView.accessibilityTraits.insert(.button)

If you wanted to add multiple values, you can do:

accessibilityView.accessibilityTraits.formUnion([.button, .selected])

If you want to set the traits to a specific set, then do:

accessibilityView.accessibilityTraits = [.button, .selected] // whatever options you need

To remove a value, use:

accessibilityView.accessibilityTraits.remove(.button)
like image 85
rmaddy Avatar answered Sep 19 '22 06:09

rmaddy


In the short term if you have a lot of code to migrate you can use operator overloading to reimplement the missing operators:

#if swift(>=4.2)
    public extension UIAccessibilityTraits {
        public static func |= (left: inout UIAccessibilityTraits, right: inout UIAccessibilityTraits) {
            left = left | right
        }

        public static func | (left: UIAccessibilityTraits, right: UIAccessibilityTraits) -> UIAccessibilityTraits {
            return UIAccessibilityTraits(rawValue: left.rawValue | right.rawValue)
        }

        public static prefix func ~ (trait: UIAccessibilityTraits) -> UIAccessibilityTraits {
            return UIAccessibilityTraits(rawValue: ~trait.rawValue)
        }
    }
#endif
like image 31
Alan Zeino Avatar answered Sep 22 '22 06:09

Alan Zeino