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