[swift-evolution] Code blocks and trailing closures

Adrian Zubarev adrian.zubarev at devandartist.com
Wed Mar 15 06:00:26 CDT 2017

I’m slightly confused by this. How is a trailing closure different from a code block in Swift? It’s basically the same thing with some extra syntax sugar because it happens to be the last parameter of your function.

You can simply write this if you wanted to:

myFucntion(someLabel: abc, closureLabel: { …; return })
Parentheses are indicating that your closure is immediately invoked.

let someInt = { return 42 }()  

let someClosureWhichReturnsAnInt = { return 42 } // You can reuse the closure
print(someClosureWhichReturnsAnInt()) // Invocation happens now here
return is scope based and it’s totally clear (to me) that in your case return will return from your closure with a value of Void.

Adrian Zubarev
Sent with Airmail

Am 15. März 2017 um 11:35:39, Rien via swift-evolution (swift-evolution at swift.org) schrieb:

What does the following code fragment do?

serverCert.write(to: certificateUrl) { showErrorInKeyWindow(message); return }

The only possible answer is: I don’t know.

The problem is finding out what the “return” statement will do.

Without knowing if the {...} is a code block or a trailing closure it is impossible to know what the return statement will do. It will either end the closure or it will end the function that contains this code block.

This could be disambiguated by using the same syntax as for lazy variables:

serverCert.write(to: serverCertificateUrl) { showErrorInKeyWindow(message: message); return }()

Now it is clear that the return statement will only terminate the (trailing) closure.

A question to the educators on the list: Is this a real problem?

Personally, I dislike this situation, but I am also ambivalent towards the solution I just described.


Site: http://balancingrock.nl
Blog: http://swiftrien.blogspot.com
Github: http://github.com/Balancingrock
Project: http://swiftfire.nl

swift-evolution mailing list
swift-evolution at swift.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170315/e160c60e/attachment.html>

More information about the swift-evolution mailing list