斯威夫特告诉我什么?

在函数定义中,孤独的下划线意味着什么?

例如 map(_:)

我明白,在定义函数时,我可以:

func myFunc(_ string: String) { ... }

然后我是否将其称为 myFunc(_:)而不是 myFunc(_string:),即有意隐藏参数名称?

58693 次浏览

_用于定义未命名的参数

如果有多个 _,则表明不需要在函数调用中命名参数

func myFunc(name:String, _ age:String){
}


myFunc(“Milo", "I'm a really old wizard")

如果不使用下划线,则使用

myFunc(“Milo”, age: "I'm a really old wizard")

函数调用不需要 _。它只是用来表示某事物不需要有一个名称。

关于如何引用函数,您不必为函数调用传递任何名称。
但是由于您也没有定义参数类型,所以在我看来这是一个无效的示例(至少在 Xcode 7和 Swift 2.0中不能使用它)

编辑:
从 Swift 3.0开始

myFunc(name: “Milo”, age: "I'm a really old wizard")

应该使用

Swift 需要一个说明函数名称的约定,不仅包括函数名称本身(在括号之前) ,还包括参数的外部名称。惯例是名称后面跟冒号。下面是一个函数声明(在 Swift 2.0中) :

func myFunc(param1 param1:String, param2:String, param3:String) {}

这是函数的名称:

myFunc(param1:param2:param3:)

然而,在现实生活中,一个或多个参数可能(实际上很可能)不会外部化任何名称。因此,我们需要一个占位符的名称。下划线就是那个占位符——就像下划线是声明中抑制名称外部化的符号一样。下面是另一个函数声明(在 Swift 2.0中) :

func myFunc2(param1:String, _ param2:String, _ param3:String) {}

这是函数的名称:

myFunc2(_:_:_:)

[ Swift 2.0规范在这里很重要。在 Swift 2.0中,第一个参数名称在默认情况下始终是外部化的 没有,而其他参数名称在默认情况下是外部化的 。在 Swift 1.2及其之前,外部化规则取决于声明出现的位置,这是不必要的不一致和混乱。]

在引用函数时,为了消除歧义,有必要提供函数名以及它所期望的任何参数的外部名称。

比如说,

func myFunc(myString string: String) { ... }

还有

func myFunc(_ string: String) { ... }

表示两个不同的函数,一个函数在调用函数时为第一个 String 参数提供外部标签,另一个函数不使用标签,如:

myFunc(myString: "hi")

还有

myFunc("hi")

因此,为了识别一个函数,我们为每个参数包含一个外部标签,其中“ :”表示要提供一个参数——例如,yourFunc(arg1:arg2:)将接受2个参数。

当没有使用外部标签时,我们放置下划线(’_’)。

对于上面给出的两个函数,我们将使用以下方法唯一地标识它们:

myFunc(myString:)myFunc(_:)