I have an enum named ProgrammingLanguage:
enum ProgrammingLanguage {
case Swift, Haskell, Scala
}
Now I have a class named <
I guess you could simply achieve it in the modern way {^_^}.
protocol Option: RawRepresentable, Hashable, CaseIterable {}
extension Set where Element: Option {
var rawValue: Int {
var rawValue = 0
for (index, element) in Element.allCases.enumerated() where contains(element) {
rawValue |= (1 << index)
}
return rawValue
}
}
... then
enum ProgrammingLanguage: String, Option {
case Swift, Haskell, Scala
}
typealias ProgrammingLanguages = Set
let programmingLanguages: ProgrammingLanguages = [.Swift, .Haskell]
Reference: https://nshipster.com/optionset/