先日書いたSwiftでのビット演算の覚書のアップデートです。
Swift Foundation の Protocol を眺めていて見つけました。
ドキュメント読むの大事 😊
Sponsor Link
Protocol OptionSet
ビットデータへのインターフェースとして用意されてました。
以下が、Apple のドキュメントに載っているサンプルですが、そのままです。
コード
struct ShippingOptions: OptionSet {
let rawValue: Int
static let nextDay = ShippingOptions(rawValue: 1 << 0)
static let secondDay = ShippingOptions(rawValue: 1 << 1)
static let priority = ShippingOptions(rawValue: 1 << 2)
static let standard = ShippingOptions(rawValue: 1 << 3)
static let express: ShippingOptions = [.nextDay, .secondDay]
static let all: ShippingOptions = [.express, .priority, .standard]
}
使い方:データのセット
直接指定するのであれば、以下のように設定できます。
コード
let singleOption: ShippingOptions = .priority
let multipleOptions: ShippingOptions = [.nextDay, .secondDay, .priority]
let noOptions: ShippingOptions = []
既存の変数に対しての追加も以下のように行えます。
セット
var freeOptions: ShippingOptions = []
if purchasePrice > 50 {
freeOptions.insert(.priority)
}
使い方:データのチェック
特定のビットがセットされているかも以下のようにチェックできます。
チェック
if freeOptions.contains(.priority) {
print("You've earned free priority shipping!")
} else {
print("Add more to your cart for free priority shipping!")
}
まとめ:自分でビット演算を書く必要なし
どのビットがどの意味かということを、structで定義してあげれば、あとは、このOptionSetが処理してくれるので、
もう自分でビット演算する必要はないみたい。
Sponsor Link