我刚刚更新到xCode 10,并立即收到此错误“二进制运算符'| ='无法应用于两个'UIAccessibilityTraits'操作数” 错误出现在代码的第四行:
func setAccessibilityView() {
self.addSubview(accessibilityView)
accessibilityView.isAccessibilityElement = true
accessibilityView.accessibilityTraits |= UIAccessibilityTraits.button
}
答案 0 :(得分:15)
这些不是Objective-C的位掩码。 accessibilityTraits
的类型为UIAccessibilityTraits
,它符合OptionSet
,而后者又符合SetAlgebra
。
要将值添加到现有值,请替换:
accessibilityView.accessibilityTraits |= UIAccessibilityTraits.button
具有:
accessibilityView.accessibilityTraits.insert(.button)
如果要添加多个值,可以执行以下操作:
accessibilityView.accessibilityTraits.formUnion([.button, .selected])
如果要将特征设置为特定集合,请执行以下操作:
accessibilityView.accessibilityTraits = [.button, .selected] // whatever options you need
要删除值,请使用:
accessibilityView.accessibilityTraits.remove(.button)
答案 1 :(得分:3)
|=
是“按位或与分配运算符”,仅适用于二进制整数类型。在Objective-C中,accessibilityTraits
是位掩码。在Swift中,它已使用更好的语法更新为OptionSet
:
accessibilityView.accessibilityTraits.insert(.button)
答案 2 :(得分:3)
短期内,如果要迁移大量代码,则可以使用运算符重载来重新实现缺少的运算符:
#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
答案 3 :(得分:2)
|=
是按位或和赋值运算符”,仅适用于二进制整数类型。在Objective-C accessibilityTraits is a bitmask
中。
在swift 4.2
中,您可以像下面这样使用:
accessibilityTraits = UIAccessibilityTraits(rawValue: accessibilityTraits.rawValue | UIAccessibilityTraits.button.rawValue)