代码片段

比特枚举

为了表示一些配置或标记,在C++中,我们经常会使用下面的枚举

enum Item
{
    Apple = 1 << 0,
    Orange = 1 << 1,
    Peach = 1 << 2,
}
int itemSet = Apple | Orange;
if itemSet & Apple == Apple
{
    // do
}
else if itemSet & Peach == 0
{
    // do
}

itemSet |= Peach;   // itemSet: Apple, Orange, Peach
itemSet &= ~Apple;  // itemSet: Orange, Peach

Objective-C中也可以通过enum来实现这样的功能,但是在Swift中却不能通过enum来实现,而是通过struct来实现。Swift 2.0中代码如下。

struct Item: OptionSetType
{
    let rawValue: Int
    init(rawValue: Int) { self.rawValue = rawValue }

    static let Apple = Item(rawValue: 1 << 0)
    static let Orange = Item(rawValue: 1 << 1)
    static let Peach = Item(rawValue: 1 << 2)
}
var itemSet: Item = [.Apple, .Orange]
if itemSet.contains(.Apple)
{
    // do
}
else if !itemSet.contains(.Peach)
{
    // do
}

itemSet.unionInPlace(.Peach)    // itemSet: Apple, Orange, Peach
itemSet.subtractInPlace(.Apple) // itemSet: Orange, Peach