二进制运算符'| ='不能应用于两个'UIAccessibilityTraits'操作数

时间:2018-09-17 19:11:04

标签: ios swift

我刚刚更新到xCode 10,并立即收到此错误“二进制运算符'| ='无法应用于两个'UIAccessibilityTraits'操作数” 错误出现在代码的第四行:

func setAccessibilityView() {
    self.addSubview(accessibilityView)
    accessibilityView.isAccessibilityElement = true
    accessibilityView.accessibilityTraits |= UIAccessibilityTraits.button
}

4 个答案:

答案 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)