OptionSetType and enums

前端 未结 2 523
野性不改
野性不改 2021-01-04 02:35

I have an enum named ProgrammingLanguage:

enum ProgrammingLanguage {
  case Swift, Haskell, Scala
}

Now I have a class named <

2条回答
  •  情书的邮戳
    2021-01-04 03:40

    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/

提交回复
热议问题