<div dir="ltr">I believe Dave had a design more like this in mind:<div><br></div><div>```<br><div><div>struct _View&lt;T&gt; {</div><div>    let array: Array&lt;Any&gt;</div><div>    subscript(index: Int) -&gt; T? {</div><div>        guard index &gt;= 0 &amp;&amp; index &lt; array.count else { return nil }</div><div>        return array[index] as? T</div><div>    }</div><div>}</div><div><br></div><div>extension Array {</div><div>    var double: _View&lt;Double&gt; {</div><div>        return _View(array: self)</div><div>    }</div><div>}</div></div><div>```</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 18, 2016 at 2:00 AM, Adrian Zubarev 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:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div class="gmail-m_-4091591652219577513m_-7333948024739528437bloop_markdown"><p>Hi Dave,</p>

<p>Thank you for your answer. I have to admit this is a ‘workaround’ but it will make everything even worse.</p>

<p>From:</p>

<pre><code class="gmail-m_-4091591652219577513m_-7333948024739528437swift">public func scopedJavaScript(at index: Int) -&gt; (javaScript: String, scope: Document)?
</code></pre>

<p>To:</p>

<pre><code class="gmail-m_-4091591652219577513m_-7333948024739528437swift">public subscript(at index: Int) -&gt; (javaScript: String, scope: Document)?

public var scopedJavaScript: Array {  
    get { return self }  
    set { /* implementation artifact */ }
}
</code></pre>

<p>Now I could write code like <code>array.scopedJavaScript.scopedJ<wbr>avaScript.scopedJavaScript</code> and so one, which makes no sense any more.</p>

<p>Where we could simply allow:</p>

<pre><code class="gmail-m_-4091591652219577513m_-7333948024739528437swift">public subscript scopedJavaScript(at index: Int) -&gt; (javaScript: String, scope: Document)?
</code></pre>

<p>This would ensure that the user can only write something like:</p>

<pre><code class="gmail-m_-4091591652219577513m_-7333948024739528437swift">array.scopedJavaScript[at: 42] // get the value
array.scopedJavaScript[at: 42] = (…, …) // set the value
</code></pre>

<ul>
<li>Is there anything that speaks against optionally named subscripts?</li>
<li>Technical reasons?</li>
<li>Swiftiness?</li>
</ul>

<p></p></div><div class="gmail-m_-4091591652219577513m_-7333948024739528437bloop_original_html"><span><div id="gmail-m_-4091591652219577513m_-7333948024739528437bloop_customfont" style="font-family:helvetica,arial;font-size:13px;color:rgb(0,0,0);margin:0px"><br></div> <br> <div id="gmail-m_-4091591652219577513m_-7333948024739528437bloop_sign_1479455258346931968" class="gmail-m_-4091591652219577513m_-7333948024739528437bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">-- <br>Adrian Zubarev<br>Sent with Airmail</div></div> <br></span><div><div class="gmail-m_-4091591652219577513h5"><p class="gmail-m_-4091591652219577513m_-7333948024739528437airmail_on">Am 17. November 2016 um 23:33:44, Dave Abrahams via swift-evolution (<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>) schrieb:</p> <blockquote type="cite" class="gmail-m_-4091591652219577513m_-7333948024739528437clean_bq"><span><div><div></div><div><br>on Thu Nov 17 2016, Adrian Zubarev &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br><br>&gt; Dear Swift community,<br>&gt;<br>&gt; while building a framework for BSON I had the following idea.<br>&gt;<br>&gt; Here is a snippet of some code I do have in my module:<br>&gt;<br>&gt; extension Array where Element == Document.Value {<br>&gt;<br>&gt;     public func double(at index: Int) -&gt; Double? {<br>&gt;<br>&gt;         guard self.startIndex &lt;= index &amp;&amp; index &lt; self.endIndex else { return nil }<br>&gt;<br>&gt;         if case .double(let double) = self[index] {<br>&gt;<br>&gt;             return double<br>&gt;         }<br>&gt;         return nil<br>&gt;     }<br>&gt;<br>&gt;     …<br>&gt; }<br>&gt; This function is used to query the array and check if the element at the given index is of a<br>&gt; specific type. Now I would like also to implement a semi-schema setter.<br>&gt;<br>&gt; The problem that I see, is the ugliness of the subscript I’d create.<br>&gt;<br>&gt; Currently the code would read nicely let d = array.double(at: 42), but after change to a subscript<br>&gt; the API would look odd array[doubleAt: 42] = 5.0.<br>&gt;<br>&gt; Don’t get me wrong here, I also have methods with larger names like public func scopedJavaScript(at<br>&gt; index: Int) -&gt; …. You can easily imagine that such subscripts would look ugly<br>&gt; array[scopedJavaScriptAt: 123] = ….<br>&gt;<br>&gt; I propose to align the design of subscript with functions where one could optionally give subscript<br>&gt; a name.<br>&gt;<br>&gt; func name(label parameter: Type) -&gt; ReturnType<br>&gt;<br>&gt; subscript optionalName(label parameter: Type) -&gt; ReturnType<br>&gt; This change would make my API nice and<br>&gt; clean. array.scopedJavaScript[at: 213] = …<br><br>You do that by giving your Array a scopedJavaScript property, and<br>making that indexable.<br><br>-- <br>-Dave<br><br>______________________________<wbr>_________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br></div></div></span></blockquote></div></div></div><div class="gmail-m_-4091591652219577513m_-7333948024739528437bloop_markdown"><p></p></div></div><br>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div></div></div>