swift - Can you extend an enum? -


i use enums store string values this:

    enum animals: string {         case desccat = "i has attitude"         case descdog = "how can help"         case descgator = "i eat you"         var s: string {             {                 return self.rawvalue string             }         }     } 

then access them this:

print("dogs like:" + animals.descdog.s) 

my question can extend enums other struct or object don't have add var s: string {} property each enum?

you want add property enums raw value string? sounds case constrained protocol extensions!

extension rawrepresentable rawvalue == string {     var description: string {         return rawvalue     } } 

this works because enums raw value automatically conform rawrepresentable protocol, , said protocol has associated type rawvalue tells type raw value is.

now animals enum automatically inherit it:

print(animals.desccat.description) // -> "i has attitude" 

notice string enums customstringconvertible, have description property (that returns name of enum case), , yours doesn't override it:

print(animals.desccat) // -> "desccat" 

if want description override default, add declaration of customstringconvertible conformance enum:

private enum animals: string, customstringconvertible { /*...*/ } print(animals.desccat) // -> "i has attitude" 

you can extend idea cover other raw value types. example:

extension rawrepresentable rawvalue: customstringconvertible {     var description: string {         return rawvalue.description     } } 

now, can automatic descriptions enums raw value int or custom type (so long type has description of own).


Comments

Popular posts from this blog

matlab - error with cyclic autocorrelation function -

django - (fields.E300) Field defines a relation with model 'AbstractEmailUser' which is either not installed, or is abstract -

c# - What is a good .Net RefEdit control to use with ExcelDna? -