Swift中的外部参数

ali*_*ner 6 function swift

  • 我是Swift的新手,我的问题是我们在哪里使用并需要外部参数?

Cih*_*Tek 11

来自Apple的Swift语言指南:

有时,在调用函数时命名每个参数很有用,以指示传递给函数的每个参数的用途.

如果希望函数的用户在调用函数时提供参数名称,请为本地参数名称定义每个参数的外部参数名称.

因此,您不需要"外部参数名称",但使用它们是一个好习惯,因为它们在调用方法时用作有关参数的文档.

例如,不使用外部参数名称,您可以定义这样的连接方法:

func join(_ s1: String,_ s2: String,_ joiner: String) -> String {
    return s1 + joiner + s2
}
Run Code Online (Sandbox Code Playgroud)

然后会像这样调用:

join("foo", "bar", ", ")
Run Code Online (Sandbox Code Playgroud)

如您所见,每个参数的含义都不是很清楚.使用外部参数名称,您可以定义相同的方法,如下所示:

func join(string s1: String, toString s2: String, withJoiner joiner: String) -> String {
    return s1 + joiner + s2
}
Run Code Online (Sandbox Code Playgroud)

然后会强制用户像这样调用它:

join(string: "foo", toString: "bar", withJoiner: ", ")
Run Code Online (Sandbox Code Playgroud)

您可以看到它使参数的含义以及方法的作用更加清晰.

在这个简单的例子中,它似乎并不那么重要,但是当定义采用不那么明显含义的大量参数的方法时,使用外部参数名称将使您的代码更容易理解.

Swift 3更新:

随着Swift 3的引入,这变得更有意义.考虑append(contentsOf:)Swift 3中Array类的方法:

在这种情况下,没有不同的内部和外部参数名称将迫使我们将标签更改为contentsOf类似于string调用站点中的标签,这不会像前一个那样好.Swift 3 API指南依赖于具有不同的内部和外部参数名称来创建简洁明了的方法.