Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Function Parameter Names in Swift

Tags:

swift

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?

like image 575
Razor Avatar asked Jul 10 '14 15:07

Razor


1 Answers

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)
like image 187
Mick MacCallum Avatar answered Oct 01 '22 21:10

Mick MacCallum