<div dir="ltr"><div>I also ran into this issue recently with <a href="https://bugs.swift.org/browse/SR-4745">SR-4745</a>. It also same up in comments on <a href="https://bugs.swift.org/browse/SR-2008">SR-2008</a>. It looks like the issue was <a href="http://discourse.natecook.com/t/pitch-tuple-destructuring-in-parameter-lists/1501">discussed here on SE</a> exactly year ago.</div><div><br></div><div>Turns out Swift does not support tuple destructuring in closure arguments. Only in let statement and for-in. What previously worked for simple cases (not nested tuples) was some kind of side effect?!</div><div><br></div><div>I strongly feel we need to address this in time for Swift 4, as the consequent implementation of SE-0110 seriously hobbles concise and readable functional style code. I&#39;m partial to solution suggested by Raphael Reitzig as summarized by Ben Rimmington in <a href="https://bugs.swift.org/browse/SR-2008?focusedCommentId=22578&amp;page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-22578">comments on SR-2008</a>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><ul><li>tuple destructuring in parameter lists (which is currently not supported);<br></li><li>and for closure expressions, disallowing single parentheses around multiple parameters, or requiring double parentheses for tuple destructuring.</li></ul></blockquote><div> and</div><div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">One could be ambitious and propose general destructuring (similar to Scala). By using a keyword, backwards-compatibility and unambiguity could be achieved.</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Example: </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">{ let (x,y,z) in ...}</blockquote></div><div>  </div><div>When asked about what would adding support for destructuring tuples in closure arguments entail in the compiler (could it for example reuse implementation from for-in), Jordan Rose said: </div><div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">It&#39;s 80% a new feature. The compiler would have to figure out what the proper type of the closure is anyway (the hard part) and then assign from that type into local variables for the destructured parameters (the easy part).</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Please do take it to swift-evolution if you&#39;re interested!</blockquote><div><br></div><div>I don&#39;t think I can drive this to SE proposal at this moment. Any takers?</div><div><br></div><div>--Pavol</div><div> </div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 24, 2017 at 9:12 PM, Tony Parker 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 style="word-wrap:break-word;line-break:after-white-space">Hi everyone,<div><br></div><div>We received a pull request in swift-corelibs-foundation which is apparently in response to a language change for SE-0110.</div><div><br></div><div>It turns this perfectly reasonable code:</div><div><div><br></div><div><font face="Menlo">-        self.forEach { (keyItem, valueItem) in</font></div><div><br></div><div>into this:</div><div><br></div><div><br><font face="Menlo">+        self.forEach { (arg) in<br>+            let (keyItem, valueItem) = arg<br></font><br>Is that really the design pattern we want to encourage? What was wrong with the previous code?</div><div><br></div><div>(<a href="https://github.com/apple/swift-corelibs-foundation/pull/995/files" target="_blank">https://github.com/apple/<wbr>swift-corelibs-foundation/<wbr>pull/995/files</a>)</div></div><span class="HOEnZb"><font color="#888888"><div><br></div><div>- Tony</div><div><br></div></font></span></div><br>______________________________<wbr>_________________<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/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
<br></blockquote></div><br></div>