<div dir="ltr">Another interpretation is that a Set *is* indexed, and its value is nonexistent. Or, in other words:<div><br></div><div>var x = [String: ()]</div><div>var y = [String: ()]()</div><div><br></div><div>Literals might be</div><div><br></div><div>var z = [&quot;bourbon&quot;: (), &quot;scotch&quot;: (), &quot;beer&quot;: ()]</div><div><br></div><div>or more succinctly</div><div><br></div><div><div>var a = [&quot;bourbon&quot;: (), &quot;scotch&quot;, &quot;beer&quot;]</div></div><div><br></div><div>Other choices like Void or nil may be more appropriate.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 18, 2016 at 4:24 PM, Michael Henson via swift-evolution <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"><div dir="ltr">Swift currently has literal and type shorthand syntax for native Array and Dictionary types, but not the Set type. It would be useful to have a literal shorthand for Set as well.<br><br>The existing productions for array and dictionary literals and types share brackets as delimiters, differing only in the contents between the brackets. That poses a slight problem for Set because any syntax, to be useful, must also be easily distinguishable from the other types.<br><br>Consider that Arrays and Dictionaries are both naturally indexed collections. Arrays by the integer value of the order of items in the collection, usually implicitly, and Dictionaries by the hashed key associated with each value.<br><br>Arrays, implicit index:<div><br></div><div>let array = [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]</div><div>var array: [String]</div><div>var empty: [String] = []<br><br>Dictionaries, explicit index:</div><div><br></div><div>let dictionary = [&quot;a&quot;: 1, &quot;b&quot;: 5, &quot;c&quot;: 9]</div><div>var dictionary: [String: Int]</div><div>var empty: [String: Int] = [:]<br><br>Sets, by contrast, have no particular order and no &quot;key&quot;. Even though the Set is enumerable and iterable, it isn&#39;t indexed. With that in mind, we can declare that a Set literal or Set type literal should distinguish itself by declaring that it has no index.</div><div><br>The Set literal could be:<br><br></div><div>let set = [ _: &quot;a&quot;, &quot;b&quot;, &quot;c&quot; ]<br>var set = [ _: String ]</div><div>var empty: [ _: String ] = [_:]</div><div><br></div><div>In the grammar:<br><br>set-literal -&gt; [ _ : array-literal-items[opt] ]<br>literal-expression -&gt; array-literal | dictionary-literal | set-literal<br><br>set-type -&gt; [ _ : type ]</div><div>type -&gt; array-type | dictionary-type | set-type | ... etc.<br><br></div><div><br>Examples:<br><br>let x = [ _: &quot;A&quot;, &quot;B&quot;, &quot;C&quot; ]</div><div>let y: [ _: String ] = [ _: ]<br><br><br>Alternatives considered:<br><br><div>Without literals, declaring a Set type is straightforward, easy to recognize, and not much more verbose. There might not be enough of a difference to justify special syntax in the core language.<br><br>Mike</div></div></div>
<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>
<br></blockquote></div><br></div>