標籤:
http://www.cnblogs.com/breezemist/p/4326644.html
今天在使用swift時發現,寫的func總是要求寫出第二個參數的外部變數名,很不理解,感覺和書上說的function不一樣,查了一下,終於發現了原因:寫在class內部的function叫做method,是特殊的functoin,系統會自動補上外部變數名,參看以下串連 http://stackoverflow.com/questions/24050844/swift-missing-argument-label-xxx-in-call
防止串連失效,截取部分內容如下:
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.
Swift: missing argument label 'xxx' in call