<div dir="ltr">How about using a colon to separate it, to make `completion` look like an argument and to separate it from being a function? Something like this:<div><br></div><div><div><span class="Apple-tab-span" style="white-space:pre">        </span>UIView.animate(withDuration: 0.4) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>// animations</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>completion: { finished in</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>// completion</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jun 9, 2016 at 1:06 AM Brent Royal-Gordon via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">&gt; Here&#39;s a common thing to say:<br>
&gt;<br>
&gt;    UIView.animate(withDuration:0.4, animations: {<br>
&gt;        self.v.backgroundColor = UIColor.red()<br>
&gt;    })<br>
&gt;<br>
&gt; That&#39;s ugly. I&#39;d rather write:<br>
&gt;<br>
&gt;    UIView.animate(withDuration:0.4) {<br>
&gt;        self.v.backgroundColor = UIColor.red()<br>
&gt;    }<br>
&gt;<br>
&gt; What stops me is that `animations:` is not eligible for trailing closure syntax, because it isn&#39;t the last parameter — `completion:` is. But `completion:` has a default value, namely `nil` — that&#39;s why I&#39;m allowed to omit it. So why can&#39;t the compiler work its way backwards through the parameters, and say to itself: &quot;Well, I see a trailing closure, and I don&#39;t see any `animations:` label or any `completion:` label, so this trailing closure must be the `animations:` argument and the `completions:` argument must be `nil`.&quot;<br>
<br>
If we may take leave of practical considerations for a moment, I&#39;d like to note that the ideal syntax for a call like this would probably look like:<br>
<br>
        UIView.animate(withDuration: 0.4) {<br>
                // animations<br>
        }<br>
        completion { finished in<br>
                // completion<br>
        }<br>
<br>
And of course, since `completion` has a default value, this would naturally degrade to:<br>
<br>
        UIView.animate(withDuration: 0.4) {<br>
                // animations<br>
        }<br>
<br>
I&#39;m guessing this isn&#39;t possible because the `completion` could instead be a call to a separate function with a trailing closure. But is there some way we could get something similar? That could significantly improve our handling of multi-block APIs and give trailing closures the ability to emulate more kinds of syntax.<br>
<br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
<br>
_______________________________________________<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/mailman/listinfo/swift-evolution</a><br>
</blockquote></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr">-Saagar Jha</div></div>