<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">&gt; 2) for var i = length; --i &gt;= 0; { ...<br>
&gt;<br>
&gt; This is a &quot;count-down&quot; loop, and isn&#39;t handled that well in Swift. The &quot;guessing&quot; translation is both wrong and fails to compile (&quot;for i in length ... 0&quot;), another attempt compiles but is easy to get wrong:<br>
&gt;<br>
&gt; for length.stride(to: 0, by: -1) { // wrong, includes length but not zero<br>
&gt; for length.stride(through: 0, by: -1) { // wrong, still includes length<br>
&gt; for (length - 1).stride(through: 0, by: -1) { // works, but people have switched back to Java by now<br>
&gt;<br>
&gt; Probably the best practice is to use reverse() on the range, since then you&#39;d be using the same method on a &quot;range literal&quot;, the indices range, or a collection:<br>
&gt;<br>
&gt; for (0 ..&lt; length).reverse() { ...<br>
&gt;<br></blockquote><div><br></div><div>Have there been any ideas for addressing this in the standard library? Perhaps a modification to Range to allow reverse intervals, or perhaps a ReverseRange type, and a new operator &quot;&gt;..&quot; which would mean the reverse of &quot;..&lt;&quot; ?</div><div><br></div><div>It seems &quot;<span>for</span><span> i </span><span>in</span><span> </span><span>ReverseCollection</span><span>(</span><span>a</span><span>..&lt;</span><span>b</span><span>)&quot; currently works, though it looks a little weird. Of course Nate&#39;s example &quot;(a..&lt;b).reverse()&quot; works too, but it&#39;s far too many parentheses for my taste.</span></div>







</div></div></div>