<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Oct 12, 2016 at 4:21 PM, Karl <span dir="ltr">&lt;<a href="mailto:razielim@gmail.com" target="_blank">razielim@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>&gt; My point is that, IMO, this is all I want. Thus what I’m implying is that there’s probably not any ABI impact to (IMO) “fix” enums with associated values, and so I don’t know why this discussion keeps going on and veering into (what seems to me to be) overly complex territory when many of us just want a nicer way to express cases likes these - not a whole new enum model that has to break everything.<br>
<br>
</span>To be fair, the title is &quot;Enums with stored properties” and the OP insists it is not just syntactic sugar.<br>
<br>
I think we all want better syntax for working with enums. They are groups of related values, so surely they have many common properties, but the barrier between enum cases in the language is sometimes far stronger than the barrier between them semantically.<br>
<br>
Maybe some kind of actual stored properties would be nice. Not like the “RectSize” example in this thread, where the values were all constants, but like the “FileError” example, where every case has a URL associated value. For example:<br>
<br>
enum Something {<br>
    var timeTaken : TimeInterval<br>
<br>
    case oneThing(Int)<br>
    case anotherThing(Double)<br>
    case yetAnother(Bool)<br>
}<br>
<br>
is equivalent to:<br>
<br>
enum Something {<br>
    case oneThing(Int, TimeInterval)<br>
    case anotherThing(Double, TimeInterval)<br>
    case yetAnother(Bool, TimeInterval)<br>
}<br>
<br>
Since we know all payloads contain a TimeInterval and you didn’t specify a layout, we could lay them out in a predictable position for faster access. The compiler could probably do that anyway, even if you did specify an explicit tuple, but doesn’t today AFAIK. Maybe I’ll look at implementing that - we could maybe get away with it now, but it wouldn’t be worth the hassle once we have a stable ABI.</blockquote><div><br></div><div>Yes, yes, let&#39;s talk about this in particular! I assume this offers performance advantages over what&#39;s possible currently. Among the things I&#39;d like to find out: Was there a rationale for omitting this originally? Are there any drawbacks in terms of performance of the simplest kinds of enums?</div></div></div></div>