示例:
mutating func moveByX(deltaX: Double, y deltaY: Double)
第一个参数采用Double并将其作为deltaX
保存在该方法范围内。但是,y
和deltaY
是什么?
我读了这篇文章但找不到任何相关内容:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Methods.html
答案 0 :(得分:2)
在您的示例中,
y
是external parameter name,deltaY
是本地参数名称,Double
是参数的类型。如果您熟悉Objective-C,则这对应于具有以下声明的方法:
-(void)moveByX:(double)deltaX y:(double)deltaY;
答案 1 :(得分:2)
这就是Swift模仿Objective C命名参数(参数的伪命名)的方式。它很容易分解。
mutating func moveByX(deltaX: Double, y deltaY: Double)
1 2 3 4 5 6
在此示例中,该方法实际上称为moveByX:y:
等效的Objective C方法定义如下所示。
- (void)moveByX:(Double)deltaX y:(Double)deltaY
调用此方法时,名称的第二部分将与其余参数一起单独包含。
var dub = Double(0.5)
moveByX(dub, y: dub)
答案 2 :(得分:1)
swift中的方法同时具有外部参数名称和本地参数名称。如果只定义了一个swift编译器放入默认值,则首先定义外部然后定义外部。
默认情况下,Swift在方法中为第一个参数名称提供本地参数名称,默认情况下为第二个和后续参数名称提供本地和外部参数名称。
在示例中,“y”是调用方法时使用的外部参数,“deltaY”是在该函数的内部计算中使用的变量名。
您还可以使用_表示您不希望参数具有外部名称。 当外部和内部名称相同时,#用于速记。
示例
1)
func exampleFunction(externalVarName1 localVarName1: Int, externalVarName2 localVarName2: Int) {}
像这样调用:
exampleFunction(externalVarName1: 0, externalVarName2: 0)
2)
func exampleFunction2(autocompleteHintName: Int, autocompleteHintName2: Int) {}
像这样调用
exampleFunction2(0, 0)
3)
func exampleFunction3(#nameForBoth: Int, #nameForBoth2: Int) {}
像这样调用
exampleFunction3(nameForBoth: 0, nameForBoth2: 0)
4)
func exampleFunction4(nameForBoth nameForBoth: Int, nameForBoth2 nameForBoth2: Int) {}
与3)相同,但会发出警告,可以使用#shorthhand。这样称呼
exampleFunction4(nameForBoth: 0, nameForBoth2: 0)
5)
func exampleFunction5(_: Int, _: Int) {}
像这样调用
exampleFunction5(0, 0)
答案 3 :(得分:0)
deltaX
和deltaY
是参数名称。但是,当您调用该函数时,它将被调用为movebyX(val, y: val)
,其中val
被您传入函数的Double替换。中间的y本质上是为了帮助函数在被调用时的可读性,并且在swift中是常见的做法,使代码尽可能可读(调用函数的人可以轻松地告诉每个参数是什么而不需要查看函数头)。