如何在Swift中声明和使用位字段?
像这样声明枚举确实有效,但try 将两个或两个值合并在一起无法编译:
enum MyEnum: Int
{
case One = 0x01
case Two = 0x02
case Four = 0x04
case Eight = 0x08
}
// This works as expected
let m1: MyEnum = .One
// Compiler error: "Could not find an overload for '|' that accepts the supplied arguments"
let combined: MyEnum = MyEnum.One | MyEnum.Four
我查看SWIFT导入基础EnUM类型,它通过定义符合RawOptionSet
协议的struct
来实现:
struct NSCalendarUnit : RawOptionSet {
init(_ value: UInt)
var value: UInt
static var CalendarUnitEra: NSCalendarUnit { get }
static var CalendarUnitYear: NSCalendarUnit { get }
// ...
}
RawOptionSet
协议是:
protocol RawOptionSet : LogicValue, Equatable {
class func fromMask(raw: Self.RawType) -> Self
}
然而,没有关于这个协议的文档,我自己也不知道如何实现它.此外,目前还不清楚这是否是实现位字段的官方快捷方式,或者这是否只是Objective-C桥如何表示它们.