Swift/OptionSet
モチベーション
使ったことがないprotocolなので目を通しておく
/icons/hr.icon
iOS 8.0+
A type that presents a mathematical set interface to a bit set.
ここだけ読んでも分からない
コードの例、enum使えば良いのでは?
iOS 8.0のリリース日は2014/9/17
iOS 8(アイオーエス エイト)は、Appleが開発しているモバイルオペレーティングシステムiOSの8番目のメジャーリリースである。 2014年9月17日にリリースされた。
enumはSwiftのリリース時からあるみたい
2014あたり
一旦説明を読む
よく見たらコードの例が非直感的だった
code:swift
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)
}
express, all の戻り値が複数になっている
インターフェースとしては可変長系のものに似ている
[]の有無が定まっていないところが
雰囲気は掴んだ
プロパティに一意のビットパターンを用いることで排他に状態を持つことができる
可変長のcaseを持つenumを作れば良いのでは?
→ 良くない!ビットパターンを持つということは集合の計算ができるということ
和集合、積集合の計算が用意
アプリ開発でぱっと使うケースが思いつかない
code:swift
@OptionSetMembers
struct MyOptions: OptionSet {
enum Option: Int {
case a
case b
case c
}
}
これ良いな
マクロ前は各プロパティに一意のビットパターンを当てる必要があったが、それを自動でやってくれる
どのプロパティに何のビットパターンを当てるかは人間は考えなくて良いため
参考