[swift-evolution] Removing "_ in" from empty closures

Rob Napier robnapier at gmail.com
Fri May 13 11:13:14 CDT 2016

Currently if a closure takes a value, it requires "_ in" to note that the
value is ignored. This makes sense in many cases, but creates a bit of a
mess in the case of an empty, void-returning closure:

doThing(withCompletion: { _ in })

I'd like to suggest that the compiler promote the empty closure literal {}
to any void-returning closure type so that this could be written:

doThing(withCompletion: {})

This encourages the use of empty closures over optional closures, which I
think is open for debate. In general I try to avoid optionals when they can
be precisely replaced with a non-optional value. Furthermore, most Cocoa
completion handlers are not optional.

The alternative is to not do this, but encourage that any closure that
could reasonably be empty should in fact be optional. I would then want
Cocoa functions with void-returning closures to be imported as optionals to
avoid "{ _ in }".

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160513/672d3e0a/attachment.html>

More information about the swift-evolution mailing list