在Swift中使用函数参数名称

Raz*_*zor 12 swift

在Swift中,在调用方法时使用参数名称,第一个参数除外.为什么不使用名字?

使用Swift手册的变体;

var count2: Int = 0
func incrementBy2(amount: Int, numberOfTimes times: Int) {
count2 += amount * times}
Run Code Online (Sandbox Code Playgroud)

这将有效;

incrementBy2(2, numberOfTimes: 7)
Run Code Online (Sandbox Code Playgroud)

然而,这给了我"呼叫中的外来参数标签'金额'"

incrementBy2(amount: 2, numberOfTimes: 7)
Run Code Online (Sandbox Code Playgroud)

这有什么理由,还是其中一种"只是它的方式"?

Mic*_*lum 17

这是遵循我们从Objective-C习惯的约定,其中第一个参数的名称与方法名称相结合.这是一个例子:

- (void)incrementByAmount:(NSInteger)amount
            numberOfTimes:(NSInteger)times
{
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

您可以调用方法,如:

[self incrementByAmount:2 numberOfTimes:7];
Run Code Online (Sandbox Code Playgroud)

通过将参数的名称合并到方法的名称中,读取感觉更自然.在Swift中,您可以通过以下方式实现相同的目标:

func incrementByAmount(amount: Int, numberOfTimes: Int) {
    // same stuff in Swift
}
Run Code Online (Sandbox Code Playgroud)

并调用方法如:

incrementByAmount(2, numberOfTimes: 7)
Run Code Online (Sandbox Code Playgroud)

如果您不想使用此约定,Swift使您能够更明确地定义单独的内部和外部参数名称,如下所示:

func incrementByAmount(incrementBy amount: Int, numberOfTimes: Int) {
    // same stuff in Swift
    // access `amount` at this scope.
}
Run Code Online (Sandbox Code Playgroud)

您可以像这样调用方法:

incrementByAmount(incrementBy: 2, numberOfTimes: 7)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。这个概念现在很有意义。尴尬的是,看似简单,我却没听懂。:-) (2认同)

Ale*_*eda 5

在您的示例中,您没有为第一个参数设置名称.您只有变量名称.

请试试以下:

func incrementBy2(amount am: Int, numberOfTimes times: Int) {
}
Run Code Online (Sandbox Code Playgroud)

所以你可以称之为

incrementBy2(amount: 0, numberOfTimes: 0)

并且am将在函数内部的变量的名称.amount将是一个外部名称.

如果你想要相同的外部名称和变量,你可以试试这个:

func incrementBy2(amount amount: Int, numberOfTimes times: Int) {
}
Run Code Online (Sandbox Code Playgroud)

还是打个电话

incrementBy2(amount: 0, numberOfTimes: 0)

更多信息 函数参数名称指定外部参数名称 Apple的Swift编程语言章节