枚举 – 在Swift中声明并使用位域枚举

如何在Swift中声明和使用位域?

声明这样的枚举可以正常工作,但是一起尝试OR 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如何导入基础枚举类型,并通过定义符合RawOptionSet协议的结构来实现:

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桥只代表它们。

您可以构建符合RawOptionSet协议的结构,您可以像内置枚举类型一样使用它,但也可以使用位掩码功能。这里的答案显示如何:
Swift NS_OPTIONS-style bitmask enumerations

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...