<div dir="ltr">I would rather have a syntax that mirrors the way Protocol does it.<div><br></div><div><span style="font-size:12.8px">struct Card {</span><br style="font-size:12.8px"><span style="font-size:12.8px">        suit:enum&lt;CardSuit&gt;</span><br style="font-size:12.8px"><span style="font-size:12.8px">        value:Int</span><br style="font-size:12.8px"><span style="font-size:12.8px">}</span><br></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">or we could change it so this only excepts the enum itself unless you explicitly cast from a Int or another enum:</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">struct Card {</span><br style="font-size:12.8px"><span style="font-size:12.8px">        suit:CardSuit</span><br style="font-size:12.8px"><span style="font-size:12.8px">        value:Int</span><br style="font-size:12.8px"><span style="font-size:12.8px">}</span><span style="font-size:12.8px"><br></span></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">







<p><b><font color="#cc0000">___________________________________</font></b></p><p><b>James⎥Head Of CEO</b></p><p><b><font color="#cc0000"><a href="mailto:james@supmenow.com" target="_blank">james@supmenow.com</a>⎥<a href="http://supmenow.com" target="_blank">supmenow.com</a></font></b></p><p><b><font size="2">Sup</font></b></p><p><b><font size="2">Runway East
</font></b></p><p><b><font size="2">10 Finsbury Square</font></b></p><p><b><font size="2">London</font></b></p><p><b><font size="2">
EC2A 1AF </font></b></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On Thu, Mar 24, 2016 at 5:41 PM, Carlos Rodríguez Domínguez <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It is a common practice in C to assign to integer (int, int16, int64, etc.) typed variables “constant&quot; values declared in enums. In swift, it is in fact possible to do that by using enums&#39; “rawValue” property. When importing structs from C into swift, we even get some fields declared with an integer type, but expecting the assignment of a “constant” declared inside an enum. Of course, this is error prone, it is “old-style” programming and very confusing for newcomers. To solve this issue, my proposal is to be able to create extensions that promote certain fields within a class or struct to enums.<br>
<br>
For instance, let’s take these sample C struct and enum:<br>
<br>
struct Card {<br>
        int suit;<br>
        int rank;<br>
};<br>
<br>
typedef enum {HEARTS, DIAMONDS, CLUBS, SPADES} CardSuit;<br>
<br>
(Note: I understand that above code follows a bad programming practice, yet it is widely common)<br>
<br>
It should be imported into swift as follows:<br>
<br>
struct Card {<br>
        suit:Int<br>
        value:Int<br>
}<br>
<br>
enum CardSuit : Int {<br>
        case Hearts, Diamonds, Clubs, Spades<br>
}<br>
<br>
Now, I propose to be able to create an extension as follows:<br>
<br>
extension Card {<br>
        #enumvalue(suit:CardSuit)<br>
}<br>
<br>
>From this moment on, the suit field should only receive CardSuit values, thus not requiring the use of raw values for assignments.<br>
<br>
These extensions should also be of great interest for people using CoreData, since it is not possible to declare enums in models. Therefore, to declare enums, it is necessary to declare integer values, and then use the “unsafe”, “unexpressive&quot; approach explained before.<br>
<br>
Note that the proposal intends to only support promotions from integer values to enum values, but, for example, it could also be extended to string values.<br>
<br>
Finally, it could be appropriate to extend this proposal to redeclare func’s signatures, in order to promote certain parameters to enum values.<br>
<br>
Best,<br>
<br>
Carlos.<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div><br></div>