【问题标题】:Binary operator '|=' cannot be applied to two 'UIAccessibilityTraits' operands二元运算符“|=”不能应用于两个“UIAccessibilityTraits”操作数
【发布时间】:2018-09-17 19:11:03
【问题描述】:

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

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

【问题讨论】:

  • 如果你正在使用 Pod “Floaty”,我确定你会做什么,然后用accessibilityView.accessibilityTraits.insert(.button) 更改accessibilityView.accessibilityTraits |= UIAccessibilityTraits.button

标签: ios swift


【解决方案1】:

这些不是 Objective-C 位掩码。 accessibilityTraits 属于 UIAccessibilityTraits 类型,它符合 OptionSet,而 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)

【讨论】:

    【解决方案2】:

    |= 是“按位或赋值运算符”,仅适用于二进制整数类型。在 Objective-C 中,accessibilityTraits 是一个位掩码。在 Swift 中,它已更新为 OptionSet,语法更好:

    accessibilityView.accessibilityTraits.insert(.button)
    

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案4】:

        |=按位或赋值运算符”,仅适用于二进制整数类型。在 Objective-C 中 accessibilityTraits is a bitmask

        swift 4.2 你可以像下面这样使用:

        accessibilityTraits = UIAccessibilityTraits(rawValue: accessibilityTraits.rawValue | UIAccessibilityTraits.button.rawValue)
        

        【讨论】:

        • 那么,accessibilityTraits.remove(.selected) 的等价物是什么?
        • 该解决方案在 Swift 4.2 迁移指南swift.org/migration-guide-swift4.2中的已知问题下被调用
        猜你喜欢
        • 2016-04-10
        • 2015-09-01
        • 2017-11-22
        • 2018-06-23
        • 2023-03-10
        • 2016-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多