Swift 中的 Objective-C NS_OPTIONS

QED*_*QED -2 objective-c bit-fields swift

NS_OPTIONS在 Objective-C 中给出了一个定义:

typedef NS_OPTIONS(NSInteger, MyType) {
   MyTypeOption1 = 1 << 0,
   MyTypeOption2 = 1 << 1,
   MyTypeOption3 = 1 << 2,
   // etc
}
Run Code Online (Sandbox Code Playgroud)

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

let default : MyType = MyTypeOption1 | MyTypeOption2
Run Code Online (Sandbox Code Playgroud)

错误:

Protocol 'BinaryInteger' requires that 'MyType' conform to 'BinaryInteger'
Run Code Online (Sandbox Code Playgroud)

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

改变NS_OPTIONS声明或用 Swift 声明新类型OptionSet不是……选项。我怎样才能让 Swift 打球?

Dáv*_*tor 5

你的语法根本就是错误的。位字段的 Swift 语法(实际上OptionSet在 Swift 中称为 an)是数组语法,而不是按位 OR 语法。

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

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

有关该主题的更多信息,请参阅如何在 Swift 中创建 NS_OPTIONS 样式的位掩码枚举?