<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class="">What I am really missing is tying the enum to that protocol. I would like to write something like WorkingEngine.States.Idle.</div>
<div class=""><br class="">
</div>
<div class="">In C# you can use namespace to do so, as their <i style="font-weight: bold;" class="">
interface</i>&nbsp;declarations can’t nest types either.</div>
<div class="">In C&#43;&#43; you can use either namespace or nest enum inside a virtual class.</div>
<div class="">In Objective-C and Swift probably the best way is to declare the enum in the same file as the protocol and use the name of the protocol as prefix to the name of the enum.</div>
<div class=""><br class="">
</div>
<div class="">I thought Swift might improve on this a bit. It is definitely not a functional thing, rather a code-navigation/readability thing.</div>
<div class=""><br class="">
</div>
<div class="">J.</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Nov 21, 2016, at 2:29 PM, Derrick Ho &lt;<a href="mailto:wh1pch81n@gmail.com" class="">wh1pch81n@gmail.com</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class="">Actually this is very consistent. You can not nest data structures like enums, structs, or classes in a protocol. This is because a protocol is meant to be a list of variables and functions that data structures may conform to. A protocol is not
 a data structure.<br class="">
<div class="gmail_quote">
<div dir="ltr" class="">On Mon, Nov 21, 2016 at 7:33 AM Jakub Bednář via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:<br class="">
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi fellow Swifters,<br class="gmail_msg">
<br class="gmail_msg">
I have just started using the language and was trying to declare an enum inside a protocol.<br class="gmail_msg">
<br class="gmail_msg">
protocol WorkingEngine {<br class="gmail_msg">
&nbsp; &nbsp;enum States {<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Idle<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Pending<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Working<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Finished<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Canceled<br class="gmail_msg">
&nbsp; }<br class="gmail_msg">
<br class="gmail_msg">
&nbsp; var state: States { get }<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
The compiler refused this and I had to take the enum outside of the protocol:<br class="gmail_msg">
<br class="gmail_msg">
enum WorkingEngineStates {<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Idle<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Pending<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Working<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Finished<br class="gmail_msg">
&nbsp; &nbsp; &nbsp; &nbsp; Canceled<br class="gmail_msg">
&nbsp; }<br class="gmail_msg">
<br class="gmail_msg">
protocol WorkingEngine {<br class="gmail_msg">
&nbsp; var state: WorkingEngineStates { get }<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
This does not seem coherent with the rest of the language, as enums can be nested in classes, structs and even enums, but not to protocols.<br class="gmail_msg">
I haven’t found any proposal for this change. Is this the correct place to request it or get some opinion on the idea?<br class="gmail_msg">
<br class="gmail_msg">
Thanks a lot,<br class="gmail_msg">
<br class="gmail_msg">
Jakub<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
swift-evolution mailing list<br class="gmail_msg">
<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg">
</blockquote>
</div>
</div>
</blockquote>
</div>
<br class="">
</body>
</html>