OptionSet with associated value for each option
But that does not compile. In fact, it looks like the filter property is not separately defined for each option, but rather for a whole option set.
This is because an OptionSet isn't really a set, per se. If I have the following OptionSet:
struct MyOptions: OptionSet {
let rawValue: Int
static let foo = MyOptions(1 << 0)
static let bar = MyOptions(1 << 1)
}
and then I make the set like so:
let opts: MyOptions = [.foo, .bar]
I don't actually have a collection with two MyOptions
instances in it. Instead, I have a new instance of MyOptions
whose rawValue
is set to (.foo.rawValue | .bar.rawValue)
—i.e. 3. The original two MyOptions
instances are discarded as soon as opts
is made.
Similarly, your logger.outputs
will be an instance of OutputOptions
with rawValue
3 and the default value for filter
.
Thus, it's not really possible to do what you want with an OptionSet
.