在Swift中声明和使用位域枚举
在Swift中应该如何声明和使用位字段?
像这样声明一个枚举确实可行,但是尝试对2个值进行或运算将无法编译:
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如何导入Foundation枚举类型,它是通过定义struct
符合RawOptionSet
协议的a 来实现的:
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
}
但是,没有关于该协议的文档,我无法自己弄清楚如何实现它。此外,还不清楚这是实现位字段的官方Swift方法,还是这仅仅是Objective-
C桥如何表示它们的方式。
回答:
您可以构建struct
符合RawOptionSet
协议的,并且可以像内置enum
类型一样使用它,但也具有位掩码功能。这里的答案显示了如何:
Swift NS_OPTIONS样式的位掩码枚举。
以上是 在Swift中声明和使用位域枚举 的全部内容, 来源链接: utcz.com/qa/412281.html