While I was watching WWDC videos today, I noticed that there's a bit of 
annoying boilerplate in OptionSet specifications, and set out to get rid of it. 
Basically, what I'd like to do is this:

        extension OptionSet where RawValue: Integer {
            init(bit bits: RawValue...) {
                self.init(rawValue: bits.reduce(0) { $0 | (1 << $1) })
            }
        }

        struct FooOptions: OptionSet {
            let rawValue: Int
            
            static let bar = FooOptions(bit: 0)
            static let baz = FooOptions(bit: 1)
        }

However, this was thwarted by the fact that the << operator is not in Integer. 
Or BitwiseOperations. Or any protocol, in fact.

From what I understand, this is a long-known issue we were planning to address 
in the Integer redesign, but I'm not sure what the status of that is at this 
point. I would guess that we're facing one of three situations:

1. An Integer redesign is still planned for Swift 3, but hasn't been reviewed 
yet.
2. An Integer redesign has been deferred, but an incremental improvement (like 
adding bitshifting to BitwiseOperations) would be welcome.
3. An Integer redesign has been deferred, and an incremental improvement is 
either not desired or too late at this point.

Can anyone share the status of this? If we're in #2, I'd be happy to put 
together a quick proposal to patch this particular issue up in time for Swift 
3. (I assume that `OptionSet.init(bit:)` would be considered a "new feature" 
and thus out of scope.)

-- 
Brent Royal-Gordon
Architechies

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to