[swift-evolution] [Proposal] Shorthand Argument Renaming

Frédéric Blondiau frederic.blondiau at douwere.com
Mon May 30 11:44:36 CDT 2016


I was thinking about this, and would like to get some feedback before making my first proposal.

Best regards,


Shorthand Argument Renaming


Swift automatically provides shorthand argument names to inline closures which cleverly allows us to write

    reversed = names.sort( { $0 > $1 } )

I would suggest to use another syntax, using these new “names”

    reversed = names.sort( { .0 > .1 } )


The $n notation is generally used with positional parameters using one-based numbering, $1 referring to argument 1; $2, to argument 2... with a special meaning for $0 (could be the name of the function, or the full list of parameters).

This $n notation is often handy, but feels strange in Swift... like imported from UNIX scripting (but here zero-based, anyway).

Proposed solution

The .n notation is more Swift-like — as used to access Tuple members, for example.

Detailed design

Today, .0 or .1 (as any .n's) are refused by the compiler, as being not valid floating point literals.

I’m not a compiler expert, but eventually fetching this error inside a closure body could easily be translated into accepting this new syntax.

There can’t be conflict with other shorthands (like accessing static members using dot notation) as members can’t consist of only digits characters.

Impact on existing code

$n need to be rewritten .n

Alternatives considered

Create a default argument named “arguments” (like “error” in catch, “newValue” in setters or “oldValue” in a a didSet observer) accessed like a Tuple

    reversed = names.sort( { arguments.0 > arguments.1 } )

but this is (of course) much less convenient.

More information about the swift-evolution mailing list