【问题标题】:Objective-C NS_OPTIONS in SwiftSwift 中的 Objective-C NS_OPTIONS
【发布时间】:2020-05-15 13:50:04
【问题描述】:

我得到了一个在 Objective-C 中定义的NS_OPTIONS

typedef NS_OPTIONS(NSInteger, MyType) {
   MyTypeOption1 = 1 << 0,
   MyTypeOption2 = 1 << 1,
   MyTypeOption3 = 1 << 2,
   // etc
}

我正在将此类型导入 Swift,但我无法形成位域。

let default : MyType = MyTypeOption1 | MyTypeOption2

错误:

Protocol 'BinaryInteger' requires that 'MyType' conform to 'BinaryInteger'

IDE 表明问题出在常设冒号按位或运算符。

更改 NS_OPTIONS 声明或使用 Swift 的 OptionSet 声明新类型不是 ... 选项。如何让 Swift 打球?

【问题讨论】:

    标签: objective-c swift bit-fields


    【解决方案1】:

    您的语法完全错误。位域的 Swift 语法(在 Swift 中实际上称为 OptionSet)是数组语法,而不是按位 OR 语法。

    使用NS_OPTIONS 创建的Objective-C 枚举会自动作为OptionSets 导入Swift。

    所以您只需要执行let default: MyType = [.option1, .option2] 而不是尝试复制 Obj-C 位域语法。

    有关该主题的更多信息,请参阅How to create NS_OPTIONS-style bitmask enumerations in Swift?

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多