函数定义中的下划线是什么意思?
例如 map(_:)
map(_:)
我了解在定义函数时,我可以执行以下操作:
func myFunc(_ string: String) { ... }
然后,我将其称为myFunc(_:)而不是myFunc(_string:),即故意隐藏参数名称吗?
myFunc(_:)
myFunc(_string:)
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及更低版本中,外部化规则取决于声明的出现位置,该声明不必要地前后不一致且令人困惑。