一尘不染

斯威夫特告诉我_:是什么?

swift

函数定义中的下划线是什么意思?

例如 map(_:)

我了解在定义函数时,我可以执行以下操作:

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

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


阅读 205

收藏
2020-07-07

共1个答案

一尘不染

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及更低版本中,外部化规则取决于声明的出现位置,该声明不必要地前后不一致且令人困惑。

2020-07-07