Swift 斯威夫特告诉我的是什么?

Swift 斯威夫特告诉我的是什么?,swift,Swift,在函数定义中,单独的下划线是什么意思 e、 g.map(:) 我理解,在定义函数时,我可以: func myFunc(_ string: String) { ... } 然后我会将其称为myFunc(:)而不是myFunc(_字符串:),即故意隐藏参数名吗?使用\u来定义参数未命名 如果您有多个\uu,则表示不需要在函数调用中命名参数 func myFunc(name:String, _ age:String){ } myFunc(“Milo", "I'm a reall

在函数定义中,单独的下划线是什么意思

e、 g.
map(:)

我理解,在定义函数时,我可以:

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

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

使用
\u
来定义参数未命名

如果您有多个
\uu
,则表示不需要在函数调用中命名参数

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

myFunc(“Milo", "I'm a really old wizard")
如果不使用下划线,则将使用

myFunc(“Milo”, age: "I'm a really old wizard")
函数调用不需要
。它只是用来表示某物不需要有名称

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

编辑:
自Swift 3.0以来

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

应该使用

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

下面是该函数的名称:

myFunc(param1:param2:param3:)
myFunc2(_:_:_:)
然而,在现实生活中,一个或多个参数可能(确实可能)不会将任何名称外部化。因此,我们需要一个用于该名称的占位符。下划线就是那个占位符——就像下划线是声明中的符号一样,禁止名称的外部化。下面是另一个函数声明(在Swift 2.0中):

下面是该函数的名称:

myFunc(param1:param2:param3:)
myFunc2(_:_:_:)

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

引用函数时,为了消除歧义,有必要提供函数名及其所需的任何参数的外部名称

比如说,

func-myFunc(myString-string:string){…}

func myFunc(ustring:string){…}

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

myFunc(myString:“hi”)

myFunc(“hi”)

因此,为了识别函数,我们为每个参数添加了外部标签,其中“:”表示要提供一个参数-例如,
yourFunc(arg1:arg2:)
将使用两个参数

当没有使用外部标签时,我们会放置一个下划线(“”)

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


myFunc(myString:)
myFunc(:)

在第一个声明中,您没有为第二个和第三个参数指定外部名称,也没有使用#。那么,它真的应该被称为您所拥有的,还是正确的,因为它是默认外部化的?--如果是这样的话,那“不再需要”了吗?@Alex你看过我答案底部的便条了吗?我正在描述Swift 2.0的情况。而
#
在Swift 2.0中消失了。我确实读过它,但在尝试将2.0与1.2联系起来时,我感到困惑,而我本不应该这样做。你说的很有道理,这次我必须重新阅读2.0版的指南@Matt您不能在Swift 1.2中单独为函数指定一致的名称,因为您不知道其参数将如何外部化。值得一读:Swift 3对函数/方法参数名称和参数标签的使用和命名方式进行了一些更改。下面是函数中非常清晰的下划线:我是swift 2.0的新手。我发现在这两种情况下,第一个参数都没有使用下划线。因此,您是否也应该在函数调用中声明名称,如:myFunc(名称:“Milo”,年龄:“我是一个非常老的向导”)?值得一读:swift3对函数/方法参数名称和参数标签的使用和命名方式做了一些更改。以下是函数中非常清晰的下划线: