up vote44down voteaccepted |
One possible reason is that it is actually a method. Methods are very sneaky, they look just like regular functions, but they don‘t act the same way, let‘s look at this: func funFunction(someArg: Int, someOtherArg: Int) { println("funFunction: \(someArg) : \(someOtherArg)")}// No external parameterfunFunction(1, 4)func externalParamFunction(externalOne internalOne: Int, externalTwo internalTwo: Int) { println("externalParamFunction: \(internalOne) : \(internalTwo)")}// Requires external parametersexternalParamFunction(externalOne: 1, externalTwo: 4)func externalInternalShared(#paramOne: Int, #paramTwo: Int) { println("externalInternalShared: \(paramOne) : \(paramTwo)")}// The ‘#‘ basically says, you want your internal and external names to be the sameexternalInternalShared(paramOne: 1, paramTwo: 4)
Now here‘s the fun part, declare a function inside of a class and it‘s no longer a function ... it‘s a method class SomeClass { func someClassFunctionWithParamOne(paramOne: Int, paramTwo: Int) { println("someClassFunction: \(paramOne) : \(paramTwo)") }}var someInstance = SomeClass()someInstance.someClassFunctionWithParamOne(1, paramTwo: 4)
This is part of the design of behavior for methods Apple Docs:
Specifically, Swift gives the first parameter name in a method a local parameter name by default, and gives the second and subsequent parameter names both local and external parameter names by default. This convention matches the typical naming and calling convention you will be familiar with from writing Objective-C methods, and makes for expressive method calls without the need to qualify your parameter names.
Notice the autocomplete:
shareimprove this answer |
answered Jun 5 ‘14 at 4:37Logan 15.7k62058 |
|