Enum raw types don't have to be strings/integers, but they have to be 
expressable by string or integer literals.   We don't guarantee uniqueness per 
se, but we do check for duplicate literals and auto-increment integers to fill 
gaps.
  
  

  
  
  
  

  
So all you have to do is make your custom type conform to 
ExpressibleByStringLiteral and you can use it as an enum's raw type.
  

  
Karl
  
  
>   
> On Oct 3, 2016 at 9:50 pm,  <Adrian Zubarev via swift-evolution 
> (mailto:[email protected])>  wrote:
>   
>   
>   
>   
>
> Hi there,
>
>   
>
> I’m interested if this idea has some potential future in Swift or not.
>
>   
>
> Currently RawRepresentable enums accept only a subset of literal types like 
> String, Character and the Integer family (enum Name : String { … }).
>
>   
>
> Sometimes this is not enough for my use-case and I wish I could feed my enums 
> with other Hashable types!
>
>   
>
> As a workaround I can create a custom struct or even a class and conform it 
> to  RawRepresentable  and fake an enum with some static variables (similar to 
> what is done with  OptionSet  types).
>
>   
>
> The problem there is that I cannot use the same switch pattern matching like 
> with enums. I’d wish either enums could accept Hashable types (maybe with 
> some restriction) or the existence on a protocol to build custom enum-like 
> types with strucs/classes and use the same switch pattern matching.
>
>   
>   struct A : Hashable { /* implement everything */ } // Variant 1: enum Test 
> : A { case something = A(rawValue: A(value: "something")) case nothing = 
> A(rawValue: A(value: "nothing")) } // Variant 2: protocol SomeFancyName : 
> RawRepresentable { … } struct Test : SomeFancyName { let rawValue: A 
> init?(rawValue: A) { // Implement + reject unwanted `A`s } static let 
> something = A(rawValue: A(value: "something")) static let nothing = 
> A(rawValue: A(value: "nothing")) } let value = Test.something switch value { 
> case .something: // handle case .nothing: // handle // Because of 
> `SomeFancyName` the switch can use enum-like pattern matching + does not need 
> the `default` case when all cases are present }    
>   
>
>
>
>   
>   
>   
>   
>   
>   
>   
>  --   
>  Adrian Zubarev
>  Sent with Airmail       
>   
>
>
>
>   
>  _______________________________________________ swift-evolution mailing list 
>  [email protected] (mailto:[email protected])   
> https://lists.swift.org/mailman/listinfo/swift-evolution
>   
  
  
   
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to