枚举 – 在Swift中声明并使用位域枚举
发布时间:2020-12-14 05:56:58 所属栏目:百科 来源:网络整理
导读:如何在Swift中声明和使用位域? 声明这样的枚举可以正常工作,但是一起尝试OR 2值无法编译: enum MyEnum: Int{ case One = 0x01 case Two = 0x02 case Four = 0x04 case Eight = 0x08}// This works as expectedlet m1: MyEnum = .One// Compiler error: "C
如何在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。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |