Using Function Parameter Names in Swift

swift

Solution

This is to follow an convention we were all used to from Objective-C, where the name of the first parameter is combined with the method name. Here's an example:

- (void)incrementByAmount:(NSInteger)amount
            numberOfTimes:(NSInteger)times
{
    // stuff
}

You could call the method like:

[self incrementByAmount:2 numberOfTimes:7];

And it feels more natural to read by incorporating the name of the parameter into the method's name. In Swift, you can achieve the same with the following:

func incrementByAmount(amount: Int, numberOfTimes: Int) {
    // same stuff in Swift
}

And call the method like:

incrementByAmount(2, numberOfTimes: 7)

If you don't want to use this convention, Swift gives you the ability to be more explicit and define separate internal and external parameter names, like so:

func incrementByAmount(incrementBy amount: Int, numberOfTimes: Int) {
    // same stuff in Swift
    // access `amount` at this scope.
}

You can call the method like this:

incrementByAmount(incrementBy: 2, numberOfTimes: 7)

Problem

In Swift parameter names are used when you call a method, except for the first parameter. Why is the first name not used? Using a variation from the Swift manual; ``` var count2: Int = 0 func incrementBy2(amount: Int, numberOfTimes times: Int) { count2 += amount * times} ``` This will work; ``` incrementBy2(2, numberOfTimes: 7) ``` However this gives me "Extraneous argument label 'amount' in call" ``` incrementBy2(amount: 2, numberOfTimes: 7) ``` Id there a reason for this or is it one of those "just the way it is" things?

Original source