函数定义中的单独下划线是什么意思?
例如地图(_:)
我明白,当定义功能我可以做:
func myFunc(_ string: 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及以前版本中,外化规则取决于声明出现的地方,这是不必要的不一致和混乱。