As mentioned previously, the core team has laid out a two-step roadmap to restoring parameter names:<br><br><a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160711/024331.html">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160711/024331.html</a><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Oct 10, 2016 at 10:55 Andrew Hart 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"><div style="word-wrap:break-word" class="gmail_msg"><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">I’ve been a little dismayed to see that closures in Swift 3 no longer have parameter names. As an example, in Swift 2, a function with a completion block may look like this:</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg"><br class="gmail_msg"></div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">func sendMessage(completion: (success: Bool, recipientID: String?, senderID: String?) -&gt; Void) {</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">    //Oh no it failed</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">    completion(success: false, recipientID: nil, senderID: nil)</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">}</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg"><br class="gmail_msg"></div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">Now, in Swift 3, it looks like this:</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg"><br class="gmail_msg"></div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">func sendMessage(completion: @escaping (_ success: String, _ recipientID: String?, _ senderID: String?) -&gt; Void {</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">    //Oh no it failed</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">    completion(false, nil, nil)</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">}</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg"><br class="gmail_msg"></div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">So now all parameter names, if you wish to include them, must be preceded by a _. Removing the _, it forces you to put it back. Or putting the parameter name twice, it forces you to replace the first occurrence with a _.</div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg"><br class="gmail_msg"></div><div id="m_6537274204600657087bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg">To me, one of the great advantages of Swift over a language like Python or Ruby is its self-documenting nature. If I’m calling a function, I don’t need to look elsewhere for a reference to the parameters I’m using. When reading back over my code, I don’t have to look elsewhere to check whether I used the correct parameters, and in the correct order. In Swift 2, I can easily glance at my code to check its correctness, and I can clearly see I’m responding to the completion block correctly. In Swift 3, I need to look elsewhere to see what the parameters in “(false, nil, nil)&quot; refers to, and that negates one of the key advantages that Swift has.</div><div id="m_6537274204600657087bloop_sign_1475922428883325184" class="m_6537274204600657087bloop_sign gmail_msg"><br class="gmail_msg"></div><div id="m_6537274204600657087bloop_sign_1475922428883325184" class="m_6537274204600657087bloop_sign gmail_msg">For this kind of closure, I feel like it’s almost required that we be able to have parameter names. My request is that if we list the parameter names explicitly, like in the Swift 2 example, then they appear in the closure call by default.</div></div>
_______________________________________________<br class="gmail_msg">
swift-evolution mailing list<br class="gmail_msg">
<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg">
</blockquote></div>