OptionSetを使用したビットフラグ判定

現在仕事で使っているアプリは、複数のユーザー設定をすべて管理するためにフラグを使用しています。

最近になってきてフラグが増えてきたため、OptionSetを使用して書いてみたところ、非常に便利だったので共有します。

OptionSetとは

swiftがもっているプロトコルの一種で、これを使用するとビット演算を簡単に扱うことができます。

公式リファレンス

実際に使ってみる

早速使用してみましょう。

OptionSetを定義

import Foundation

struct OrderState: OptionSet {
    let rawValue: Int
    static let largeText: OrderState = .init(rawValue: 1 << 0) //1
    static let colorYellow: OrderState = .init(rawValue: 1 << 5) //32
}

今回はフラグを2つ管理します。

たとえば、webの管理画面でlargeText(文字サイズ大)とcolorYellow(文字カラーを黄色)というスイッチがあったとします。

仮にlargeTextをOFFにしてcolorYellowをONにした場合、「colorYellowフラグを立てる」といい、OptionSetのなかでフラグが立っているものを探します。

フラグを呼び出して使用してみる

let orderState = OrderState.init(rawValue: 32)
// colorYellowだけがONの場合
print(self.orderState.contains(.largeText)) // false
print(self.orderState.contains(.colorYellow)) // true

rawValue = 32 の場合、2の5乗 (2^5) = 32なので、colorYellowがONになります。

指定したフラグが立っているかどうかは、このようにcontainsメソッドで判定できます。

コメント

タイトルとURLをコピーしました