<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=""><div class=""><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;"><span style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;" class="">In the simple case that's a reasonable alternative, but in this case the loss is fairly significant. Tuple splatting allows the success and failure callbacks to be called generically, simplifying the implementation of fake API calls to a single line.</span></div><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;"><br class=""></div><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;">&nbsp; &nbsp;&nbsp;<span class="" style="color: rgb(187, 44, 162);">func</span>&nbsp;getChatMessages(channel channel:&nbsp;<span class="" style="color: rgb(112, 61, 170);">ChatChannel</span>, limit:&nbsp;<span class="" style="color: rgb(112, 61, 170);">Int</span>, success: (chatMessages: [<span class="" style="color: rgb(79, 129, 135);">ChatMessage</span>]) -&gt;&nbsp;<span class="" style="color: rgb(112, 61, 170);">Void</span>, failure: (error:&nbsp;<span class="" style="color: rgb(112, 61, 170);">NSError</span>) -&gt;&nbsp;<span class="" style="color: rgb(112, 61, 170);">Void</span>) {</div><div class="" style="font-family: Menlo; margin: 0px; font-size: 11px; line-height: normal;"><div class="" style="margin: 0px; line-height: normal;"><font color="#3b3b3b" class="">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font><font color="#929292" class="">// Can't do this anymore:</font></div><div class="" style="margin: 0px; line-height: normal;"><font color="#929292" class="">&nbsp; &nbsp; &nbsp; &nbsp; // getChatMessagesEndpoint.handleCall(success, failure, callParams: (channel: channel, limit: limit))</font></div><div class="" style="margin: 0px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div></div><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; getChatMessagesEndpoint.calls.append((channel: channel, limit: limit))</div><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div class="" style="font-family: Menlo; margin: 0px; font-size: 11px; line-height: normal;"><div class="" style="color: rgb(79, 129, 135); margin: 0px; line-height: normal;"><span class="" style="color: rgb(59, 59, 59);">&nbsp; &nbsp;&nbsp;</span><span class="" style="color: rgb(59, 59, 59);">&nbsp; &nbsp;&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">if</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(59, 59, 59);" class="">getChatMessagesEndpoint.</span>successStubs<span class="" style="color: rgb(0, 0, 0);">.</span><span class="" style="color: rgb(112, 61, 170);">count</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;&gt;&nbsp;</span><span class="" style="color: rgb(39, 42, 216);">0</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;{</span></div><div class="" style="color: rgb(79, 129, 135); margin: 0px; line-height: normal;"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="color: rgb(187, 44, 162);" class="">var</span>&nbsp;stub =&nbsp;</span><span class="">successStubs</span><span style="color: rgb(59, 59, 59);" class="">.</span><span class="" style="color: rgb(61, 29, 129);">removeFirst</span><span style="color: rgb(59, 59, 59);" class="">()</span></div><div class="" style="margin: 0px; line-height: normal;"><font color="#3b3b3b" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; success(</font>messages:<font color="#4f8187" class="">&nbsp;</font>stub.0<font color="#4f8187" class="">,&nbsp;</font>someOtherValue:<font color="#4f8187" class="">&nbsp;</font>stub.1<font color="#3b3b3b" class="">)</font></div><div class="" style="color: rgb(59, 59, 59); margin: 0px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div class="" style="color: rgb(79, 129, 135); margin: 0px; line-height: normal;"><span class="" style="color: rgb(59, 59, 59);">&nbsp; &nbsp;&nbsp;</span><span class="" style="color: rgb(59, 59, 59);">&nbsp; &nbsp;&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">else</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">if</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(59, 59, 59);" class="">getChatMessagesEndpoint.</span>failureStubs<span class="" style="color: rgb(0, 0, 0);">.</span><span class="" style="color: rgb(112, 61, 170);">count</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;&gt;&nbsp;</span><span class="" style="color: rgb(39, 42, 216);">0</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;{</span></div><div class="" style="color: rgb(79, 129, 135); margin: 0px; line-height: normal;"><span class="" style="color: rgb(0, 0, 0);"><div class="" style="color: rgb(79, 129, 135); margin: 0px; line-height: normal;"><span class="" style="color: rgb(0, 0, 0);"><span style="color: rgb(187, 44, 162);" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var</span>&nbsp;stub =&nbsp;</span><span class="">failureStubs</span><span style="color: rgb(59, 59, 59);" class="">.</span><span class="" style="color: rgb(61, 29, 129);">removeFirst</span><span style="color: rgb(59, 59, 59);" class="">()</span></div><div class="" style="margin: 0px; line-height: normal;"><font color="#3b3b3b" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; failure(</font>error:<font color="#4f8187" class="">&nbsp;</font>stub.0<font color="#4f8187" class="">,&nbsp;</font>status:<font color="#4f8187" class="">&nbsp;</font>stub.1<font color="#3b3b3b" class="">)</font></div></span></div><div class="" style="color: rgb(59, 59, 59); margin: 0px; line-height: normal;">&nbsp; &nbsp; &nbsp; &nbsp; }</div></div><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;">&nbsp; &nbsp; }</div></div><div class=""><br class=""></div><div class="">All that duplicated boilerplate really adds up once you have 10 or 20 different API calls.</div><div class=""><br class=""></div><div class="">In any case, this is a rare enough pattern (though I do think it's a very useful one) that it wouldn't be a huge loss for this feature to disappear for a while, but I do hope that it shows up again in another form at some point.</div></div><div class=""><br class=""></div><div class="">Jarod</div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On Jan 27, 2016, at 11:41, Chris Lattner &lt;<a href="mailto:clattner@apple.com" class="">clattner@apple.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Jan 27, 2016, at 11:32 AM, Jarod Long &lt;<a href="mailto:swift@lng.la" class="">swift@lng.la</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">But failure in this case is a function that takes two arguments, and failureStubs is an array of tuples that map to that function's arguments. How do the tuple values get mapped to the arguments if not via tuple splatting?</div></div></div></blockquote><div class=""><br class=""></div><div class="">Ah ok, I was looking at the success case I guess. &nbsp;You’re right. &nbsp;In this case, instead of :</div><div class=""><br class=""></div><div class="">&nbsp; &nbsp; failure(failureStubs.removeFirst())<br class=""><br class=""></div><div class="">you’d have to write something like this:</div><div class=""><br class=""></div><div class="">&nbsp; &nbsp; let tmp = failureStubs.removeFirst()</div><div class="">&nbsp; &nbsp; failure(tmp.0, tmp.1)<br class=""></div><div class=""><br class=""></div><div class="">-Chris</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">Jarod</div><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Jan 27, 2016, at 11:28, Chris Lattner &lt;<a href="mailto:clattner@apple.com" class="">clattner@apple.com</a>&gt; wrote:</div><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Jan 27, 2016, at 11:24 AM, <a href="mailto:swift@lng.la" class="">swift@lng.la</a> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Apologies -- I just realized I chose a bad example that isn't actually using the feature, but the usage would be here:</div><div class=""><br class=""></div><div class=""><div class="" style="font-family: Menlo; color: rgb(79, 129, 135); margin: 0px; font-size: 11px; line-height: normal;"><span class="" style="color: rgb(187, 44, 162);">if</span><span class="" style="">&nbsp;</span>successStubs<span class="" style="">.</span><span class="" style="color: rgb(112, 61, 170);">count</span><span class="" style="">&nbsp;&gt;&nbsp;</span><span class="" style="color: rgb(39, 42, 216);">0</span><span class="" style="">&nbsp;{</span></div><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;">&nbsp; &nbsp; success(<span class="" style="color: rgb(79, 129, 135);">successStubs</span>.<span class="" style="color: rgb(61, 29, 129);">removeFirst</span>())</div><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;">}</div><div class="" style="font-family: Menlo; color: rgb(79, 129, 135); margin: 0px; font-size: 11px; line-height: normal;"><span class="" style="color: rgb(187, 44, 162);">else</span><span class="" style="">&nbsp;</span><span class="" style="color: rgb(187, 44, 162);">if</span><span class="" style="">&nbsp;</span>failureStubs<span class="" style="">.</span><span class="" style="color: rgb(112, 61, 170);">count</span><span class="" style="">&nbsp;&gt;&nbsp;</span><span class="" style="color: rgb(39, 42, 216);">0</span><span class="" style="">&nbsp;{</span></div><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;">&nbsp; &nbsp; failure(<span class="" style="color: rgb(79, 129, 135);">failureStubs</span>.<span class="" style="color: rgb(61, 29, 129);">removeFirst</span>())</div><div class="" style="font-family: Menlo; color: rgb(59, 59, 59); margin: 0px; font-size: 11px; line-height: normal;">}</div></div></div></div></blockquote><div class=""><br class=""></div><div class="">This isn’t using the feature either. &nbsp;You are passing a single value (returned by removeFirst) as a single argument. &nbsp;No spat is happening.</div></div><br class=""><div class="">-Chris</div></div></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></body></html>