Объявление и использование перечисления битовых полей в 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 импортирует типы перечисления Foundation, и делает это, определяяstruct
что соответствует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.