This will not print the name of case :

enum E: CustomStringConvertible {
    case one, two

    var description: String {return "haha"}
}

print(E.one)

So, for me, it seems like the good idea to have a standard(and built-in) way to convert string<->case i.e. to have

let e = E(caseName: "one")!
and
let s = e.caseName // always the same as defined in enum type


On 01.06.2016 18:47, Leonardo Pessoa via swift-evolution wrote:
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
<[email protected]> 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 
<[email protected]> 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 
<[email protected]> wrote:

I had no idea you could do this!!

On 1 Jun 2016, at 12:32 PM, Brent Royal-Gordon via swift-evolution 
<[email protected]> 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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[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