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
}
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)
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With