Objective-C NS_OPTIONS 在 Swift

Objective-C NS_OPTIONS in Swift

我得到了 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打球?

你的语法完全错误。位字段的 Swift 语法(实际上在 Swift 中称为 OptionSet)是数组语法,而不是按位或语法。

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

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

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