在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

回到顶部