SKOOP SKOOP - 1 year ago 117
Swift Question

Swift parameter / argument label terminology: Functions

Swift provides the ability to give both an internal and external name/label for parameters of functions. But lately Apple seems to have resorted to only saying Argument and Parameter names/labels and dropped the use of internal/external to describe these things.

In the Swift documents, and WWDC videos, there are a few "mealy mouthed"* efforts to describe the difference between a function's parameters and arguments, without referring to these as the outward facing or internal.

Of Argument and Parameter names/labels, which is internal, which is external?

EDIT: Additional Info:

Imagine a jump function.

Internally, the names of when and height might be different, and these are the internal names. External and internal don't seem to be at all confusing, other than the ordering in the Function Definition and then Declaration:

func jump(_ who: String, whenToJump when: Float, howHigh height: Int){
// wait for whenToJump
// adjust who.y by howHigh

Which of these is a parameter, in the sense Apple is referring to them, which is an argument?

*Example of Mealy Mouthed, from here:

"Each function parameter has both an argument label and a parameter
name. The argument label is used when calling the function; each
argument is written in the function call with its argument label
before it. The parameter name is used in the implementation of the
function. By default, parameters use their parameter name as their
argument label."

Answer Source

Everything is described in detail in the section Function Argument Labels and Parameter Names

in The Swift Programming Language (Swift 3)

Shortly the differences between Swift 2 and Swift 3 are

  • External name (Swift 2) is now Function Argument Label (Swift 3)
  • Internal name (Swift 2) is now Parameter Name (Swift 3)
  • In (Swift 2) the first parameter is _ name (internal, but no external) by default
  • In (Swift 3) the first parameter is name name (function argument label and parameter name) by default.