Swift 方法参数中的 3 个项目有什么用?

What are 3 items in a Swift method parameter for?

示例:

mutating func moveByX(deltaX: Double, y deltaY: Double)

第一个参数采用 Double 并将其作为 deltaX 保存在该方法范围内。然而,什么是ydeltaY

我读了这个但找不到任何相关信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Methods.html

deltaXdeltaY 是您编写函数时的参数名称。但是,当您调用该函数时,它将被调用为 movebyX(val, y: val),其中 val 被您传递给该函数的 Double 替换。中间的 y 本质上是为了帮助调用函数时的可读性,并且是 swift 中的常见做法,以使您的代码尽可能可读(调用您的函数的人可以很容易地分辨出每个参数是什么而没有查看函数头)。

在你的例子中,

如果您熟悉 Objective-C,这对应于具有以下声明的方法:

-(void)moveByX:(double)deltaX y:(double)deltaY;

这就是 Swift 模仿 Objective C 命名参数的方式(参数的伪命名)。很容易坏掉。

mutating func moveByX(deltaX: Double, y deltaY: Double)
                1        2      3     4   5       6
  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)

swift 中的方法同时具有外部参数名称和本地参数名称。首先定义外部,然后定义外部,如果只定义一个 swift 编译器放入默认值。

Swift方法中第一个参数名默认为局部参数名,第二个及以后的参数名默认为局部参数名和外部参数名。

例子中,"y"是调用方法时使用的外部参数,"deltaY"是该函数内部计算时使用的变量名。

您也可以使用 _ 表示您不希望参数具有外部名称。 # 当您的外部名称和内部名称相同时用于 shorthand。

例子

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) 相同,但会发出可以使用 # 简写的警告。像这样称呼

exampleFunction4(nameForBoth: 0, nameForBoth2: 0)

5)

func exampleFunction5(_: Int, _: Int) {}

这样称呼

 exampleFunction5(0, 0)