[swift-evolution] Working with enums by name

Leonardo Pessoa me at lmpessoa.com
Wed Jun 1 10:47:38 CDT 2016


Paul, in all my tests for this thread printing the enum value only
produced the enum value's name ("Mars" in your example). The proposal
of having a .caseName (or should it better be .caseValue to cover
enums with associated values? any other suggestions?) will prevent
that changes to this behaviour crash apps in the future as this should
always produce the same result even if the string representation
changes.

L

On 1 June 2016 at 12:15, Paul Cantrell via swift-evolution
<swift-evolution at swift.org> wrote:
> IIRC, string interpolation prepends the module name if the enum belongs to a module: “MyLib.Mars” instead of just “Mars”. It’s also been a source of compiler crashes, at least in the past.
>
> Those two factors forced me into this ugliness: https://github.com/bustoutsolutions/siesta/blob/master/Source/ResourceObserver.swift#L106-L115
>
> A clean, documented, supported way of exposing the enum case name that the runtime clearly already has available seems sensible — and should be independent of the raw type.
>
> Cheers, P
>
>> On Jun 1, 2016, at 5:10 AM, Charlie Monroe via swift-evolution <swift-evolution at swift.org> wrote:
>>
>> This is, however, kind of a hack IMHO that relies on the compiler behavior that isn't well documented.
>>
>> For example, this:
>>
>> enum Planet {
>>       case Earth
>>       case Mars
>> }
>>
>> "\(Planet.Mars)" // This is "Mars"
>>
>>
>> Works as well. You don't need to have the represented value to be String.
>>
>> Note that this:
>>
>> - works both when you have a plain enum, or enum Planet: Int, or whatever raw value kind
>> - does not work (!) when declared as @objc - then the result is "Planet".
>>
>>> On Jun 1, 2016, at 9:52 AM, Patrick Smith via swift-evolution <swift-evolution at swift.org> wrote:
>>>
>>> I had no idea you could do this!!
>>>
>>>> On 1 Jun 2016, at 12:32 PM, Brent Royal-Gordon via swift-evolution <swift-evolution at swift.org> wrote:
>>>>
>>>> Who said anything about repeating the name?
>>>>
>>>> Welcome to Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.30). Type :help for assistance.
>>>> 1> enum Planet: String { case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune }
>>>> 2> Planet.mercury.rawValue
>>>> $R0: String = "mercury"
>>>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution


More information about the swift-evolution mailing list