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

前端之家收集整理的这篇文章主要介绍了枚举 – 在Swift中声明并使用位域枚举前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在Swift中声明和使用位域?

声明这样的枚举可以正常工作,但是一起尝试OR 2值无法编译:

  1. enum MyEnum: Int
  2. {
  3. case One = 0x01
  4. case Two = 0x02
  5. case Four = 0x04
  6. case Eight = 0x08
  7. }
  8.  
  9. // This works as expected
  10. let m1: MyEnum = .One
  11.  
  12. // Compiler error: "Could not find an overload for '|' that accepts the supplied arguments"
  13. let combined: MyEnum = MyEnum.One | MyEnum.Four

我查看了Swift如何导入基础枚举类型,并通过定义符合RawOptionSet协议的结构来实现:

  1. struct NSCalendarUnit : RawOptionSet {
  2. init(_ value: UInt)
  3. var value: UInt
  4. static var CalendarUnitEra: NSCalendarUnit { get }
  5. static var CalendarUnitYear: NSCalendarUnit { get }
  6. // ...
  7. }

而RawOptionSet协议是:

  1. protocol RawOptionSet : LogicValue,Equatable {
  2. class func fromMask(raw: Self.RawType) -> Self
  3. }

然而,这个协议没有文档,我无法弄清楚如何自己实现。此外,还不清楚这是否是Swift官方实施位字段的方式,还是Objective-C桥只代表它们。

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

猜你在找的Swift相关文章